如何创建指数图

时间:2017-05-19 15:34:57

标签: plot octave

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

我正在尝试绘制基准点,我测量时间并将每个增量的内存大小加倍。

2 个答案:

答案 0 :(得分:1)

您可以使用线性轴作弊和绘图,例如从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

我得到以下图表。请注意,我绘制的数据完全是随机的,因为我没有您的数据,但我想要演示更改后的情节:enter image description here

有关您可以在图表上更改的更多属性,请参阅Axes Properties page on the Octave docs

答案 1 :(得分:1)

向Rayryeng道歉,因为我基本上提出了相同的方法,但我觉得它缺少重要的信息,例如如何将轴本身转换为等间隔的间隔,而不会弄乱与数据。所以这里是一个完整的解决方案,例如数据X对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);

enter image description here

请注意,如果您打算重叠'除此之外的另一个情节,你必须考虑到X轴上的实际值基本上是" 1,2,3 ...... 10&#34 ;,所以" log-ify"在通过hold on叠加之前,新绘图的X轴值,或者完全绘制到另一组独立的轴上,并将它们放置在相同的位置。

注意:我假设您在基数为2的对数x轴之后。如果实际上希望0-128间隔与128-256间隔相同,那么根据Rayrengs回答修改---或者甚至更好,使用更合适的图形,如条形图图形! (即,使用“两种权力”,纯粹作为每列的描述性标签使用)