Plot 如何创建指数图

Plot 如何创建指数图,plot,octave,Plot,Octave,如何使x轴每增加一倍?我希望0、128、256、512、1024和2048之间的距离相等。我该怎么做 我试图从一个基准点绘制点,在这个基准点上,我测量了时间,并且每增加一倍内存大小 你可以用一个线性轴作弊和绘图,比如从1到你想要的数字,然后在完成后更改标签。您可以使用'xtick'属性设置图形上保留的水平刻度值,并使用'xticklabel'属性将标签更改为所需的值 labels = [0 128 256 512 1024 2048]; % Provide your labels here x

如何使x轴每增加一倍?我希望0、128、256、512、1024和2048之间的距离相等。我该怎么做


我试图从一个基准点绘制点,在这个基准点上,我测量了时间,并且每增加一倍内存大小

你可以用一个线性轴作弊和绘图,比如从
1
到你想要的数字,然后在完成后更改标签。您可以使用
'xtick'
属性设置图形上保留的水平刻度值,并使用
'xticklabel'
属性将标签更改为所需的值

labels = [0 128 256 512 1024 2048]; % Provide your labels here
x = 1 : numel(labels);
y = rand(1, numel(x)); % Insert your data here
plot(x, y, 'b.'); % Plot your data

set(gca, 'xtick', x); % Change the x-axis so only the right amount of ticks remain
set(gca, 'xticklabel', labels) % Change the labels to the desired ones
我得到下面的图表。请注意,我正在绘制的数据是完全随机的,因为我没有您的数据,但我想演示更改后的绘图的外观:


有关可以在图形上更改的更多属性,请参阅。

,并向Rayryeng致歉,因为我本质上是在提出相同的方法,但我觉得它缺少重要信息,例如如何首先将轴本身转换为等距间隔,而不干扰数据。这里有一个完整的解决方案,例如数据X vs Y,为基数2生成等价于semilogx

Y = 1 : 10;
X = 2 .^ Y;

XTicks = log2(X);
XTickLabels = {};
for XTick = XTicks
  XTickLabels{end+1} = sprintf('2^{%d}', XTick);
end

plot (log2 (X), Y);
set(gca, 'xtick', XTicks, 'xticklabel', XTickLabels);

请注意,如果您计划在此基础上“叠加”另一个绘图,则必须考虑X轴中的实际值基本上是“1、2、3、…10”,因此,在通过
按住
进行叠加之前,也可以“记录”新绘图的X轴值,或者在另一个绘图上进行叠加,完全独立的一组轴,并将它们放置在同一位置


注意:我假设您的目标是一个以2为底的对数x轴。如果您确实希望0-128间隔与128-256间隔相同,则根据Rayrengs答案进行修改——或者更好,使用更合适的图形,如条形图!(即,“二次幂”仅用作每列的描述性标签)

我们的答案是否有帮助?@rayryeng,但我需要y轴和x轴都是指数轴和带标签的。我求助于python中的matplotlib,在您的回答的帮助下,我几乎成功了。但它仍然不是完美的。你可以看看这个问题的答案,它几乎解决了问题。这不是你原来的问题。你只提到了x轴。不过,我还是很高兴能帮上忙。@rayryeng感谢您的跟进。我还了解了matlab和octave在这些情况下可以做什么,我发现在这种情况下,使用matplolib的python仅在绘制点时更为有效。如果您想查看python代码的外观,可以尝试运行它……听起来不错。谢谢