2010-10-07 2 views

risposta

16

Considerate questo esempio:

%# some random data 
x = 2.^(0:10); 
y = rand(size(x)); 

plot(log2(x), y)        %# plot on log2 x-scale 
set(gca, 'XTickLabel',[])      %# suppress current x-labels 

xt = get(gca, 'XTick'); 
yl = get(gca, 'YLim'); 
str = cellstr(num2str(xt(:),'2^{%d}'));  %# format x-ticks as 2^{xx} 
hTxt = text(xt, yl(ones(size(xt))), str, ... %# create text at same locations 
    'Interpreter','tex', ...     %# specify tex interpreter 
    'VerticalAlignment','top', ...    %# v-align to be underneath 
    'HorizontalAlignment','center');   %# h-aligh to be centered 

alt text

+0

Come fare questo per l'asse y? – Nikhil

-1
+0

"semilogx (Y) crea un terreno usando una base 10 scala logaritmica per l'asse X e una scala lineare per la y- asse." Nessuna parola su come la base può essere cambiata. – Nils

+0

Sì, hai ragione. Ho perso il punto base 2. – ysap

+0

Nel caso in cui non si è a conoscenza - stai bene con la conversione di base esplicita per la trama? Puoi prendere log2() e usare invece plot lineare(). L'unico problema è che le etichette delle tacche X non saranno i tuoi dati ma il loro logaritmo. – ysap

15

È possibile tracciare direttamente con il comando plot

plot (log2(x), y) 

ma allora il vostro x zecche sarà il logaritmo piuttosto che il valore effettivo. È possibile cambiare l'etichetta

xlabel('Log (base 2) of quantity X'); 

oppure è possibile ripetere manualmente i segni di graduazione.

xt = get(gca, 'XTick'); 
set (gca, 'XTickLabel', 2.^xt); 

Oppure si può essere veramente fantasia

xticks = 10:25; 
set(gca, 'XTick', xticks); 
for j = 1:length(xticks) 
    xtl{j} = ['2^' num2str(xticks(j))]; 
end 
set(gca, 'XTickLabel', xtl) 

che sarà in modo uniforme lo spazio i segni di graduazione sulla scala logaritmica, e l'etichetta in base alla loro potenza di 2

+0

Volevo usare LaTex per cambiare le etichette di graduazione su "$ 2^{10}" ecc., Ma non riesco a capire come ottenere MATLAB per intingere le etichette di spunta usando latex – Marc

+0

così, c'è un pacchetto sullo scambio che ti consentirà di fare etichette con il tick di lattice se sei davvero ambizioso. Non l'ho provato. http://www.mathworks.se/matlabcentral/fileexchange/23841-format-tick-labels-extended – Marc

2

Si può sempre cambiare la base attraverso la seguente relazione aritmetica, che è essenzialmente una "normalizzazione". (La base insieme del 'funzione log' quindi non importa)

LOG base n (x) = LOG (x)/LOG (n)