在Matlab中为对数图选择不同的底数

15

我希望将x轴以2为底数取对数:从2的10次方到2的25次方,每一步指数都应该增加1,同时y轴应该是线性的。

这可能吗?我已经想到了

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

但是你不能设置基准值。

5个回答

17

考虑以下示例:

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


如何在y轴上实现这个? - Nikhil

15
你可以使用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次幂对其进行标记


我想使用LaTex将刻度标签更改为“$2^{10}”等,但我无法弄清楚如何让matlab使用latex解释刻度标签。 - Marc
所以,如果你非常有雄心壮志,市场上有一个包可以让你在Latex中使用刻度标签。我还没有尝试过。http://www.mathworks.se/matlabcentral/fileexchange/23841-format-tick-labels-extended - Marc

2
你可以通过以下算术关系来更改基数,这本质上是一种“标准化”。(因此,“log”函数的设置基数并不重要)
LOG base n (x) = LOG (x) / LOG (n)

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


-1

"semilogx(Y) 使用以10为底的对数刻度在x轴上创建一个图表,并在y轴上使用线性刻度。" 没有提及如何更改底数。 - Nils
以防你不知道 - 你是否可以处理图形的显式基数转换?你可以使用log2()并使用线性plot()。唯一的问题是X刻度标签将不是你的数据,而是它的对数。 - ysap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接