Выберите другую базу для логарифмического графика в Matlab
Я хочу, чтобы логарифмическая ось x была равна основанию 2: от 2 ^ 10 до 2 ^ 25 и на каждом шаге экспонента должна увеличиваться на единицу, а ось y должна быть линейной.
Как это возможно? Я уже понял, что
set(gca,'XScale','log')
но u не может установить базу.
Ответы
Ответ 1
Рассмотрим следующий пример:
%# 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]()
Ответ 2
Вы можете напрямую построить график с помощью команды plot
plot (log2(x), y)
но тогда ваши x-тики будут логарифмом, а не фактическим значением. Вы можете либо изменить свой ярлык
xlabel('Log (base 2) of quantity X');
или вы можете вручную изменить галочки.
xt = get(gca, 'XTick');
set (gca, 'XTickLabel', 2.^xt);
Или вы действительно можете себе представить
xticks = 10:25;
set(gca, 'XTick', xticks);
for j = 1:length(xticks)
xtl{j} = ['2^' num2str(xticks(j))];
end
set(gca, 'XTickLabel', xtl)
который равномерно помещает отметки меток в шкале журнала и маркирует их в соответствии с их мощностью 2
Ответ 3
Вы всегда можете просто изменить базу через следующие арифметические отношения, которые по сути являются "нормализацией". (Таким образом, установленная база вашей "лог-функции" не имеет значения)
LOG base n (x) = LOG (x) / LOG (n)
Ответ 4
Что-то вроде semilogx()??
http://www.mathworks.com/help/techdoc/ref/semilogx.html