在matlab中为对数图选择不同的基数

时间:2010-10-07 12:14:38

标签: matlab

我想让x轴与对数2成对数:从2 ^ 10到2 ^ 25,每一步指数应该增加1,而y轴应该是线性的。

这怎么可能?我已经想通了

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

但是你无法设置基础。

5 个答案:

答案 0 :(得分:16)

考虑这个例子:

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

答案 1 :(得分:15)

您可以使用绘图命令直接绘图

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的幂来标记它们

答案 2 :(得分:2)

你总是可以通过以下算术关系来改变基础,这实际上是一个“规范化”。 (因此,'log'功能的设定基数无关紧要)

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

答案 3 :(得分:0)

最简单的方法是

x = 2.^(0:10);
y = log2(x);
plot(log2(x), y)       
set (gca, 'XTickLabel', strcat('2^{',num2str(log2(x(:))),'}'));  % or
set (gca, 'XTickLabel', strcat('$2^{',num2str(log2(x(:))),'}$'));% forlatex interpreter

enter image description here

答案 4 :(得分:-1)

semilogx() ??

之类的东西

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