2010-10-07 10 views

Odpowiedz

16

Rozważmy następujący przykład:

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

Jak to zrobić dla osi Y? – Nikhil

-1
+0

„semilogx (Y) tworzy się wykres, stosując zasadę 10 skali logarytmicznej dla osi x i skali liniowej dla Y- oś." Brak słowa o tym, jak można zmienić bazę. – Nils

+0

Tak, masz rację. Brakowało mi podstawy 2 punktu. – ysap

+0

Na wszelki wypadek, jeśli nie jesteś świadomy - czy jesteś w porządku, wykonując wyraźną konwersję bazy dla fabuły? Zamiast tego możesz użyć log2() i użyć liniowego wykresu(). Jedynym problemem jest to, że etykiety zaznaczenia X nie będą twoimi danymi, ale ich logarytmami. – ysap

15

można wykreślić bezpośrednio za pomocą polecenia plot

plot (log2(x), y) 

ale wówczas x kleszcze będą raczej niż logarytm wartości rzeczywistej. Możesz po prostu zmienić etykietę lub zmienić zaznaczenie ręcznie.

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

Albo możesz być naprawdę fantazyjne

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

który będzie równomiernie przestrzeń znaki podziałki na skali logarytmicznej, oraz oznaczyć je w zależności od ich mocy 2

+0

Chciałem użyć LaTex, aby zmienić etykiety zaznaczenia na "2 $ {10}" itp., Ale nie mogę się dowiedzieć, jak uzyskać matlab do intepretowania znaczników tyknięć za pomocą lateksu – Marc

+0

, więc istnieje pakiet na giełdzie, który pozwoli ci robić etykiety z lateksem, jeśli jesteś naprawdę ambitny. Nie próbowałem tego. http://www.mathworks.se/matlabcentral/fileexchange/23841-format-tick-labels-extended – Marc

2

Zawsze można po prostu zmienić bazę poprzez następującą relację arytmetyczną, która jest zasadniczo "normalizacją". (Układ podstawy swoim „log' funkcją związku z tym nie ma znaczenia)

LOG base n (x) = LOG (x)/LOG (n) 
Powiązane problemy