2010-10-07 21 views

Respuesta

16

Considere este ejemplo:

%# 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

¿Cómo hacer esto para el eje y? – Nikhil

-1
+0

"semilogx (Y) crea una parcela usando una base 10 escala logarítmica para el eje x y una escala lineal para el y- eje." No se sabe cómo se puede cambiar la base. – Nils

+0

Sí, tienes razón. Me perdí la base 2 puntos. – ysap

+0

En caso de que no lo sepa, ¿está de acuerdo con hacer una conversión base explícita para la trama? Puede tomar log2() y usar plot lineal() en su lugar. El único problema es que las etiquetas X tick no serán sus datos sino su logaritmo. – ysap

15

Puede representar directamente utilizando el comando plot

plot (log2(x), y) 

pero entonces su x garrapatas será el logaritmo en lugar del valor real. Usted puede simplemente cambiar su etiqueta

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

o puede rehacer las marcas manualmente.

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

O puede ser realmente de lujo

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

que será espaciar uniformemente las marcas de graduación en la escala logarítmica, y etiquetarlos de acuerdo a su potencia de 2

+0

Quería usar LaTex para cambiar las etiquetas de tilde a '$ 2^{10}' etc., pero no puedo encontrar la manera de obtener matlab para interpretar las etiquetas de ticks con látex – Marc

+0

, por lo que hay un paquete en el intercambio que le permitirá hacer etiquetas de látex cuando sea realmente ambicioso. No lo he probado. http://www.mathworks.se/matlabcentral/fileexchange/23841-format-tick-labels-extended – Marc

2

Siempre se puede cambiar la base a través de la siguiente relación aritmética, que es esencialmente una 'normalización'. (La base de conjunto de su '-función log' por lo tanto no importa)

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