WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Decimalpunkt in plot als Komma

 

pospiech
Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2011, 08:08     Titel: Decimalpunkt in plot als Komma
  Antworten mit Zitat      
Ich möchte die korrekte deutsche Zahlenschreibeweise in den Plots haben.
Daher wüsste ich gerne wie man das automatisch bekommen kann.

Bislang mache ich immer ein
Code:

xlabels = get(axis, 'XTickLabel');
for k=1:size(xlabels,1)
    xlabels(k,:) = strrep(xlabels(k,:), '.', ',');
end
set(axis, 'XTickLabel', xlabels);
 

was mir aber die Zahlen falsch ausrichtet, es sei denn alle haben die gleiche Länge, was ich über
Code:

set(gca,'xticklabel',sprintf('%.1f |',get(gca,'xtick')'));
 

lösen könnte.

Ist aber immer noch alles gefrickel. Geht es nicht auch einfacher?
Private Nachricht senden Benutzer-Profile anzeigen


Don-Umbro
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2013, 13:32     Titel: Dezimalkomma in Matlab-Plots: Lösung
  Antworten mit Zitat      
Auch wenn dieses Thema schon etwas älter ist, ich hatte das gleiche Problem und hab eine für mich zufriedenstellende Lösung gefunden:

Ich benutze jetzt folgende Funktion (einfach in ein Skript-File namens "plotUseDecimalComma.m" kopieren):

Code:
function [  ] = plotUseDecimalComma( axis_handle, axis_name)
% PLOTUSEDECIMALCOMMA changes decimal point to decimal comma in a plot.
% Parameters are:
% axis_handle: Axes handle to work with (use gca for current axes handle)
% axis_name: Name of axis to be changed ('X', 'Y' or 'XY' for both axes)
    if(nargin~=2)
        error('Wrong number of input parameters.');
    end;
    switch axis_name
        case 'XY'
            plotUseDecimalComma(axis_handle, 'X');
            plotUseDecimalComma(axis_handle, 'Y');
        case {'X', 'Y'}
            tick = get(axis_handle, strcat(axis_name, 'Tick'));
            label='';
            for i=1:length(tick)
                label=[label num2str(tick(i)) '|']; %#ok<*AGROW>
            end
            label = strrep(label, '.', ',');
            set(axis_handle,  strcat(axis_name, 'TickLabel'), label);
        otherwise
            error('Wrong axis name! Use one of X, Y or XY.');
    end;
end


Aufruf erfolgt dann an gewünschter Stelle denkbar einfach z.B. via
Code:
plotUseDecimalComma(gca,'XY')


Der Code ist angelehnt an http://frommyplayground.com/decimal-comma-in-matlab-plots/, wurde von mir aber so angepasst, dass sich bis auf das Komma nichts am Tick ändert.

Gruß
Don-Umbro

Nachtrag:

Achtung! Beim "resize" einer Figure, also wenn ich die Größe des Plots ändere oder sie ausdrucke kann dies zu Fehlern führen. Beim Stauchen / Strecken werden die Ticks neu gesetzt, die TickLabels sind ja aber nicht mehr im Auto-Modus...
Private Nachricht senden Benutzer-Profile anzeigen
 
ProblemSolver

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2016, 10:04     Titel: DecimalComma
  Antworten mit Zitat      
Zuverlässige Funktion, die auch eventuelle Exponenten nicht von den Achsen löscht:

Code:

function DecimalComma(hAxes)

exl = get(hAxes, 'XRuler');
x_exp_v=exl.SecondaryLabel.Visible;
xl = exl.TickLabels.String;
for i=1:size(xl, 1)
    xl(i,:)=strrep(xl(i,:), '.', ',');
end

hAxes.XRuler.TickLabels.String=xl;
hAxes.XRuler.SecondaryLabel.Visible=x_exp_v;

eyl = get(hAxes, 'yRuler');
yl= eyl.TickLabels.String;
y_exp_v=eyl.SecondaryLabel.Visible;
 for i=1:size(yl, 1)
     yl(i,:)=strrep(yl(i,:), '.', ',');
 end
hAxes.YRuler.TickLabels.String=yl;
hAxes.YRuler.SecondaryLabel.Visible=y_exp_v;
 
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.11.2016, 11:06     Titel:
  Antworten mit Zitat      
Ich habe die Lösung von heute nicht geprüft und es wäre natürlich fein, wenn es über mehrere Releases klappt - ich möchte nur allen Masteranden, Doktoranden etc. die Unterstützung anbieten, falls ein Anruf von MathWorks hilft. Ich habe schon einge Professoren überzeugen können, dass es heutzutage vielleicht nicht mehr so zentral ist die entsprechende DIN einzuhalten.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
rob...o.0

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2018, 19:30     Titel: Alternative Lösung für Matlab R2017
  Antworten mit Zitat      
Hallo,

ich weiß der Thread ist alt und die Fragestellung sicherlich nicht mehr aktuell. Da bei der Internetsuche dieser Thread relativ weit oben steht möchte ich dennoch meinen Lösungsansatz vorstellen, da die Ansätze oben mein Problem nicht vollständig gelöst haben.

Das Problem bei mir war tatsächlich der Exponent, der durch das manuelle Setzen der TickLabels verschwindet. Die folgende Funktion ersetzt die Dezimalpunkte durch Dezimalkommata in den Beschriftungen der X- und Y-Achse. Wenn man Subplots verwendet muss man die Funktion für jeden Subplot aufrufen. An die Funktion wird der
Axes-Handle, also gca übergeben.

Code:

function decimal_comma(ax)

% check if there is an exponent 10^K currently in the plot and save info
xVisibility = ax.XAxis.SecondaryLabel.Visible ;
yVisibility = ax.YAxis.SecondaryLabel.Visible ;

% get the ticklabels with decimal POINTS
xLabels = get(ax.XAxis, 'TickLabels')
yLabels = get(ax.YAxis, 'TickLabels')

% replace decimal points with decimal commas
for i = 1:size(xLabels,1)
    xLabels(i,:) = strrep(xLabels(i,:), '.', ',');
end

for i = 1:size(yLabels,1)
    yLabels(i,:) = strrep(yLabels(i,:), '.', ',');
end

% set the plot labels to the new labels with decimal commas
ax.XAxis.TickLabels = xLabels;
ax.YAxis.TickLabels = yLabels;

% setting the ticklabels manually will automatically disable the visibility
% of the exponent (saved in .SecondaryLabel). Reactivate the visibility of
% the exponent if necessary.
ax.XAxis.SecondaryLabel.Visible = xVisibility;
ax.YAxis.SecondaryLabel.Visible = yVisibility;
   
end
 


Ich hoffe dies ist hilfreich für Leute die über diese Problematik stolpern.
Beste Grüße!
 
Hans_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2018, 18:44     Titel:
  Antworten mit Zitat      
Hallo,

ich sitze gerade an genau diesem Problem und bin auf diesen Thread gestoßen.
Ich habe einen 3D Plot, welchen ich für Latex als tikz-picture exportieren möchte.
Meine z-Achse zeigt jedoch leider Punkte, statt Kommas an und ich schaffe es auch nicht eure Funktionen entsprechend zu erweitern. Um Hilfe wäre ich sehr Dankbar!
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 20.03.2018, 09:05     Titel:
  Antworten mit Zitat      
Mein nicht-technisches Hilfeangebot, s.o. steht.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
rob...o.0

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2018, 18:03     Titel: Erweiterung 3D-Plot. Matlab R2017
  Antworten mit Zitat      
Hallo,

ich habe nur mal schnell ein 3D-Plot ausprobiert. Bei mir funktioniert es wenn du die Funktion einfach erweiterst:

Code:
function decimal_comma(ax)
% check if there is an exponent 10^K currently in the plot and save info
xVisibility = ax.XAxis.SecondaryLabel.Visible ;
yVisibility = ax.YAxis.SecondaryLabel.Visible ;
zVisibility = ax.ZAxis.SecondaryLabel.Visible ;

% get the ticklabels with decimal POINTS
xLabels = get(ax.XAxis, 'TickLabels')
yLabels = get(ax.YAxis, 'TickLabels')
zLabels = get(ax.ZAxis, 'TickLabels')

% replace decimal points with decimal commas
for i = 1:size(xLabels,1)
    xLabels(i,:) = strrep(xLabels(i,:), '.', ',');
end

for i = 1:size(yLabels,1)
    yLabels(i,:) = strrep(yLabels(i,:), '.', ',');
end

for i = 1:size(zLabels,1)
    zLabels(i,:) = strrep(zLabels(i,:), '.', ',');
end

% set the plot labels to the new labels with decimal commas
ax.XAxis.TickLabels = xLabels;
ax.YAxis.TickLabels = yLabels;
ax.ZAxis.TickLabels = zLabels;

% setting the ticklabels manually will automatically disable the visibility
% of the exponent (saved in .SecondaryLabel). Reactivate the visibility of
% the exponent if necessary.
ax.XAxis.SecondaryLabel.Visible = xVisibility;
ax.YAxis.SecondaryLabel.Visible = yVisibility;
ax.ZAxis.SecondaryLabel.Visible = zVisibility;
end


Vielleicht hilft's! Beste Grüße,
rob
 
Tesa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2018, 11:26     Titel: Dezimalzeichen von Colobar anpassen
  Antworten mit Zitat      
Hallo zusammen,

das Script für 3D plots funktioniert super! Wenn ich jetzt aber auch die Dezimalzeichen der Colorbar ändern möchte bekomme ich das nicht hin.

mit
Code:


kann ich mir die Properties anzeigen lassen. ich habe dann probiert mit
Code:
cbLabels = get(gca,'colorbar.TickLabels')
 

die Labels zu bekommen. Das funktioniert aber nicht.
Weiß jemand weiter?

LG Theresa
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.10.2018, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

Colorbar erstellen und ticks abändern kannst du mit
Code:
cb = colorbar(...)
cb.TickLabels = ...


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
didado
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 31.08.19
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 31.08.2019, 15:25     Titel: Re: Dezimalkomma in Matlab-Plots: Lösung
  Antworten mit Zitat      
Ich weiß nicht wie das bei dir funktioniert, aber ich musste es anpassen, damit es richtig läuft:

Code:
function decimal_comma(axis_handle, axis_name, varargin)
% PLOTUSEDECIMALCOMMA changes decimal point to decimal comma in a plot.
% Parameters are:
% axis_handle: Axes handle to work with (use gca for current axes handle)
% axis_name: Name of axis to be changed ('X', 'Y' or 'XY' for both axes)
    if(nargin~=2)
        error('Wrong number of input parameters.');
    end
    switch axis_name
        case 'XY'
            plotUseDecimalComma(axis_handle, 'X');
            plotUseDecimalComma(axis_handle, 'Y');
        case {'X', 'Y'}
            tick = get(axis_handle, strcat(axis_name, 'Tick'));
            label = strrep(num2str(tick), '.', ',');
            newStr = split(label,' ');
            newlabel = newStr(~cellfun(@isempty, newStr));
            set(axis_handle,  strcat(axis_name, 'TickLabel'), newlabel);
        otherwise
            error('Wrong axis name! Use one of X, Y or XY.');
    end
end


Hoffe es hilft weiter.

Don-Umbro hat Folgendes geschrieben:
Auch wenn dieses Thema schon etwas älter ist, ich hatte das gleiche Problem und hab eine für mich zufriedenstellende Lösung gefunden:

Ich benutze jetzt folgende Funktion (einfach in ein Skript-File namens "plotUseDecimalComma.m" kopieren):

Code:
function [  ] = plotUseDecimalComma( axis_handle, axis_name)
% PLOTUSEDECIMALCOMMA changes decimal point to decimal comma in a plot.
% Parameters are:
% axis_handle: Axes handle to work with (use gca for current axes handle)
% axis_name: Name of axis to be changed ('X', 'Y' or 'XY' for both axes)
    if(nargin~=2)
        error('Wrong number of input parameters.');
    end;
    switch axis_name
        case 'XY'
            plotUseDecimalComma(axis_handle, 'X');
            plotUseDecimalComma(axis_handle, 'Y');
        case {'X', 'Y'}
            tick = get(axis_handle, strcat(axis_name, 'Tick'));
            label='';
            for i=1:length(tick)
                label=[label num2str(tick(i)) '|']; %#ok<*AGROW>
            end
            label = strrep(label, '.', ',');
            set(axis_handle,  strcat(axis_name, 'TickLabel'), label);
        otherwise
            error('Wrong axis name! Use one of X, Y or XY.');
    end;
end


Aufruf erfolgt dann an gewünschter Stelle denkbar einfach z.B. via
Code:
plotUseDecimalComma(gca,'XY')


Der Code ist angelehnt an http://frommyplayground.com/decimal-comma-in-matlab-plots/, wurde von mir aber so angepasst, dass sich bis auf das Komma nichts am Tick ändert.

Gruß
Don-Umbro

Nachtrag:

Achtung! Beim "resize" einer Figure, also wenn ich die Größe des Plots ändere oder sie ausdrucke kann dies zu Fehlern führen. Beim Stauchen / Strecken werden die Ticks neu gesetzt, die TickLabels sind ja aber nicht mehr im Auto-Modus...

_________________

Let's prog it!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.