Выберите другую базу для логарифмического графика в Matlab - PullRequest
15 голосов
/ 07 октября 2010

Я хочу, чтобы ось х логарифмировалась с основанием 2: от 2 ^ 10 до 2 ^ 25, и на каждом шаге показатель степени должен увеличиваться на единицу, а ось у должна быть линейной.*Как это возможно?Я уже понял,

set(gca,'XScale','log')

, но вы не можете установить базу.

Ответы [ 4 ]

16 голосов
/ 07 октября 2010

Рассмотрим этот пример:

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

15 голосов
/ 07 октября 2010

Вы можете построить график напрямую, используя команду plot

plot (log2(x), y)

но тогда ваши отметки будут логарифмом, а не фактическим значением. Вы можете просто поменять ярлык

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

2 голосов
/ 14 октября 2011

Вы всегда можете просто изменить базу с помощью следующих арифметических отношений, которые по сути являются «нормализацией».(Таким образом, заданная база вашей функции 'log' не имеет значения)

LOG base n (x) = LOG (x) / LOG (n)
0 голосов
/ 07 октября 2010

Что-то вроде полулог () ??

http://www.mathworks.com/help/techdoc/ref/semilogx.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...