2012-05-04 16 views
11

Zrobiłem działki w Matlab, przy użyciu:Usuwanie notacji naukowej w etykiecie kleszcza działki Matlab

hold on 
plot(t1,Dx1,'r') 
xlabel('t (ps)') 
ylabel('Deviation of coordinate from initial coordinate (Å)') 
plot(t1,Dy1,'g') 
plot(t1,Dz1,'b') 
hold off 

Jednak etykiety tick na osi y są generowane w notacji naukowej:

Scientific Notation on y-axis

Czy mogę usunąć notację naukową i ustawić zakres etykiet od -0,0025 do 0,0005? Dzięki!

Odpowiedz

9

Można spróbować ręcznie ustawić kleszcz etykiety samodzielnie za pomocą sprintf:

yt = get(gca,'YTick'); 
set(gca,'YTickLabel', sprintf('%.4f|',yt)) 
+0

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. –

+1

:) - było już blisko, kiedy dostałem telefon! – robince

+1

Znak x na końcu drugiej linii jest nadal nieprawidłowy. Powinienem przeczytać, tak myślę. –

1

Można użyć tego kodu do kontrolowania formatu etykiet podziałki osi y. Ten kod pochodzi z ticks_format.m.

% Ustaw tutaj preferowany format zaznaczenia.

y_formatstring = '%3.4f'; 

% Oto kod.

ytick = get(gca, 'ytick'); 
for i = 1:length(ytick) 
    yticklabel{i} = sprintf(y_formatstring, ytick(i)); 
end 
set(gca, 'yticklabel', yticklabel) 
2

Trzeba napisać następujące:

set(gcf, 'renderer', 'zbuffer') 
+0

@Andrew Nie wiem, jak wytłumaczyć, ale to naprawdę działa! –

4

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)); 
3

warto dodać to po utworzeniu osie:

ax = gca; 
ax.YAxis.Exponent = 0; 

Oto przykład:

x = 0:0.1:10; 
y = 1000*x.^2; 

%Plot with default notation: 

subplot(1,2,1) 
plot(x,y) 


%Plot without exponent: 

subplot(1,2,2) 
plot(x,y) 
ax = gca 
ax.YAxis.Exponent = 0; 
+1

Przeczytałem dziesiątki odpowiedzi, a ten był bestt !!! Dziękuję @GHH! – user1271772

Powiązane problemy