ja też walczył z coraz moją działkę osie do wyświetlania w ustalonym pojęciem zamiast notacji naukowej. Najbardziej frustrujące dla mnie było to, że etykieta "x10^4" pozostanie na krawędzi pola kreślenia, nawet po tym, jak ponownie ręcznie przypiszę etykiety zaznaczenia do ustalonej notacji. W końcu, dzięki postowi powyżej, śledziłem problem w dół w rendererze figur. Używałem "OpenGL". Kiedy zmieniłem na "zbuffer", etykieta "x10^4" znikałaby prawidłowo po ręcznym zresetowaniu etykiet. Oto przykład kodu, który dodaje format "###, ###. 0" do etykiet osi Y, a nawet dynamicznie aktualizuje etykiety Y podczas powiększania/przesuwania itp. Dzięki dwóm pomocnym funkcjom, które znalazłem na Wymiana plików Matlaba. Miejsce znalezienia pozostałych dwóch funkcji jest zawarte w komentarzach poniżej przykładowej funkcji.
function []=TickFixExample()
figure %this one works
myRenderer='zbuffer';
set(gcf,'Renderer', myRenderer);
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');
figure %this one doesn’t work
myRenderer='OpenGL';
set(gcf,'Renderer', myRenderer);
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');
funkcja ticklabelformat (hAxes, AXNAME format) Y. Altman, można znaleźć w: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels lub guglanie 'MATLAB ticklabelformat' I zmodyfikowane lekko zmieniając linię 105 w następujący sposób:
tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);`
zamiast wersji Altmana:
tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false);
że zmiana przewiduje funkcjonalność separatora przecinkami tysięcy o funkcja y = NumberFormatter (Numbers, FormatPattern) autorstwa S. Lienhard, również na Matlab File Exchange.Moja zmodyfikowana wersja kodu Lienhard jest podane w całości poniżej:
function y = FormatNumberScalarInputStrOutput(Number ,FormatPattern)
% adapted 12-2012 by D. Bourgoyne from NUMBERFORMATTER by S. Lienhard
%
% The pound sign (#) denotes a digit, the comma is a placeholder for the
% grouping separator, and the period is a placeholder for the decimal
% separator.
% The pattern specifies leading and trailing zeros, because the 0
% character is used instead of the pound sign (#).
%
% Examples:
% NumberFormatter(rand(5),'0.000')
% NumberFormatter(rand(5)*100,'###,###.000')
import java.text.*
v = DecimalFormat(FormatPattern);
y = char(v.format(Number));
Argh, byłaś tylko sekundy szybciej ... ;-). W każdym razie powinieneś zamienić "xtick" i "xticklabel" na "ytick" i "yticklabel". A x na końcu drugiego wiersza powinien odczytać xt. –
:) - było już blisko, kiedy dostałem telefon! – robince
Znak x na końcu drugiej linii jest nadal nieprawidłowy. Powinienem przeczytać, tak myślę. –