如何制作每增加一倍的x轴?我希望0,128,256,512,1024和2048之间的距离相等。我该怎么做?
我正在尝试绘制基准点,我测量时间并将每个增量的内存大小加倍。
答案 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
我得到以下图表。请注意,我绘制的数据完全是随机的,因为我没有您的数据,但我想要演示更改后的情节:
有关您可以在图表上更改的更多属性,请参阅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);
请注意,如果您打算重叠'除此之外的另一个情节,你必须考虑到X轴上的实际值基本上是" 1,2,3 ...... 10&#34 ;,所以" log-ify"在通过hold on
叠加之前,新绘图的X轴值,或者完全绘制到另一组独立的轴上,并将它们放置在相同的位置。
注意:我假设您在基数为2的对数x轴之后。如果做实际上希望0-128间隔与128-256间隔相同,那么根据Rayrengs回答修改---或者甚至更好,使用更合适的图形,如条形图图形! (即,使用“两种权力”,纯粹作为每列的描述性标签使用)