Verfasst am: 19.09.2013, 13:32
Titel: Dezimalkomma in Matlab-Plots: Lösung
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
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...
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
rob...o.0
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.03.2018, 19:30
Titel: Alternative Lösung für Matlab R2017
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.
% 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;
Ich hoffe dies ist hilfreich für Leute die über diese Problematik stolpern.
Beste Grüße!
Hans_
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.03.2018, 18:44
Titel:
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!
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
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 ;)
Verfasst am: 31.08.2019, 15:25
Titel: Re: Dezimalkomma in Matlab-Plots: Lösung
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
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
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!
Einstellungen und Berechtigungen
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
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.