2012-05-04 26 views
11

Ho fatto una trama in Matlab, utilizzando:Rimozione notazione scientifica nell'etichetta tick di una trama 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 

Tuttavia, le etichette di graduazione sull'asse Y vengono generati in notazione scientifica:

Scientific Notation on y-axis

C'è un modo per rimuovere la notazione scientifica e le etichette y vanno da -0.0025 a 0.0005? Grazie!

risposta

9

Si potrebbe provare a impostare manualmente il segno di spunta etichette da soli, usando sprintf:

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

Argh, eri solo secondi più veloce ... ;-). Ad ogni modo, dovresti sostituire "xtick" e "xticklabel" con "ytick" e "yticklabel". E la x alla fine della seconda riga dovrebbe leggere xt. –

+1

:) - stavo proprio per quando ho ricevuto una telefonata! – robince

+1

La x alla fine della seconda riga è ancora sbagliata. Dovresti leggerlo, immagino. –

1

È possibile utilizzare questo codice per controllare il formato di etichette di graduazione dell'asse y. Questo codice deriva da ticks_format.m.

% Impostare qui il formato del segno di spunta preferito.

y_formatstring = '%3.4f'; 

% Ecco il codice.

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

dovete scrivere il seguente:

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

@Andrew Non so come spiegarlo, ma funziona davvero! –

4

Ho anche lottato con ottenere la mia trama assi da visualizzare nella nozione fisso invece di notazione scientifica. La parte più frustrante per me è stata che l'etichetta "x10^4" sarebbe rimasta sul bordo della casella di stampa anche dopo aver riassegnato manualmente le etichette di graduazione alla notazione fissa. Infine, grazie al post precedente ho rintracciato il problema con il renderizzatore di figure. Stavo usando "OpenGL". Quando sono passato a "zbuffer", l'etichetta "x10^4" scompariva correttamente quando reimpostavo manualmente le etichette di spunta. Ecco un codice di esempio che unisce il formato '###, ###. 0' alle etichette dell'asse y e aggiorna dinamicamente le etichette y anche quando esegui lo zoom/pan ecc, grazie a due utili funzioni che ho trovato su lo scambio di file Matlab. Il posto dove trovare le altre due funzioni è incluso come commenti sotto la funzione di esempio.

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

funzione ticklabelformat (hAxes, AXNAME, formato) da Y. Altman, si possono trovare in: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels o googling 'ticklabelformat MATLAB' ho modificato leggermente cambiando linea 105 come segue:

tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);` 

al posto della versione di Altman:

tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false); 

che il cambiamento prevede la funzionalità di migliaia di separatori di virgola tramite la funzione y = NumberFormatter (Numbers, FormatPattern) di S. Lienhard, anche su Scambio file Matlab.La mia versione modificata del codice di Lienhard è riporta integralmente qui di seguito:

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

Prova ad aggiungere questo dopo aver creato gli assi:

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

Ecco un esempio:

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

Ho letto dozzine di risposte, e questa era la bestt !!! Grazie @ GHH! – user1271772

Problemi correlati