2012-11-10 9 views
6

Ho due grafici. Nel primo grafico i valori per l'asse y salgono a 30000. Pertanto, Matlab sta etichettando l'asse anziché "30000" con "3" e "x10^4" SOPRA il grafico. Nel secondo grafico i valori y vanno solo a 10000. Dato che questo valore è troppo basso per passare automaticamente al formato esponenziale, stampa veramente "10000".Forza il formato esponenziale delle zecche COME MATLAB lo fa automaticamente

Vorrei sapere se esiste un modo per forzare la formattazione esponenziale. Ciò comporterà lo STESSO FORMATO in quanto Matlab lo fa automaticamente. Lo sto chiedendo perché ho visto soluzioni in cui è possibile stampare Matlab '10^3 'direttamente come etichetta Y, ma voglio solo che mostri' 1 'come Label e' x10^3 'sopra la trama.

L'immagine seguente mostra a grafici diversi uniti insieme allo scopo di chiarire la mia domanda. Nella metà sinistra dell'immagine puoi vedere cosa fa Matlab se sto usando valori> 10000. E questo è il tipo di formato che voglio ottenere per l'asse mostrato nella seconda metà se l'immagine sotto.

Exponential formatting vs. regular

risposta

2

Esso non sembra essere possibile in base a qualche lettura, test e proprietà controllo:

http://www.mathworks.com/matlabcentral/answers/8005-axes-tick-in-scientific-notation

L'etichetta notazione scientifica apparirà solo automaticamente se si non è stato impostato la proprietà YTickLabel. Se imposti YTickLabel, allora non esiste un modo (documentato) per far sì che MATLAB inserisca automaticamente l'esponente allo stesso modo.

Per evitare questo, se si imposta YTickLabel e si desidera l'esponente , è necessario text() l'esponente in cui si desidera che venga visualizzato.

è possibile formattare le etichette degli assi y in questo modo

set(gca,'YTickLabel',sprintf('%3.1f|',get(gca,'ytick')/max(get(gca,'ytick')) 

quindi aggiungere la x 10^4 con markup TeX ('$ \ times10^4 $') per ottenere lo stesso risultato manualmente.

+0

Ho aggiunto manualmente il testo ma ho avuto un 'set (gca, 'LooseInset', get (gca, 'TightInset'));' venendo in seguito che stava tagliando il testo. Quindi ho dovuto regolare manualmente anche questo: qualcosa come 'set (gca, 'LooseInset', [.0449 .1297 .0170 .06]);' – damjeux

0

Per me, l'utilizzo della sintassi '$[TeX]$' non funziona (R2012a). Invece, texlabel() funziona.

Tuttavia, Matlab non consente TeX interpretarli etichette degli assi (almeno non 2012a, e il help per 2013a non sembra promettente: per esempio set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})

Ecco una soluzione alternativa, in cui si fanno le proprie etichette . utilizzando la funzione text()

plot(1:9,exp(-[1:9])) 
set(gca,'XTick',[1 3 5 7 9],'XTicklabel',[]) 
arrayfun(@(x)text(x-.1,-.02,texlabel(sprintf('e^%d',x))),[1 5 9],'UniformOutput',false) 
1

ottengo solo qui perché ho bisogno di qualcosa di simile, e so che ora c'è una soluzione per questo Forse da R2015 e più recenti, è possibile impostare l'esponente excatly con.:

ax.YAxis.Exponent = 3 % 3 is for example 

Oppure, se si desidera che i numeri completi:

ax.YAxis.Exponent = 0 

Mentre ax è la maniglia dell'asse.

Problemi correlati