Matlab绘图:如何使2的n次幂X轴刻度等间距显示
Matlab绘制等间距X轴刻度的2的幂次数据图
我用Matlab绘图时,X轴取值是2的整数次幂(如2、4、8...),Y轴是任意数值向量。想要让X轴刻度保持等间距,但现在的实现里X值小的地方刻度挤在一起,X越大间距越宽。
当前代码
M = [2, 4, 8, 16, 32, 64, 128, 256]; s1 = [104 136 168 200 232 264 296 328]; figure(1) semilogy(M, s1, 'ko-', 'LineWidth', 1); hold on; % grid; axis ([0 256 0 600]) xticks(M);
当前效果

解决方案
问题出在直接用2的幂次作为X轴坐标,线性刻度下数值差距大就会导致刻度间距不均。可以通过用数据索引作为X坐标,自定义刻度标签来实现等间距显示:
修改后的代码
M = [2, 4, 8, 16, 32, 64, 128, 256]; s1 = [104 136 168 200 232 264 296 328]; figure(1) % 用数据点的索引作为X轴位置,保证刻度等间距 plot(1:length(M), s1, 'ko-', 'LineWidth', 1); hold on; grid; % 设置X轴刻度位置为索引,标签替换为对应的2的幂次数值 xticks(1:length(M)); xticklabels(M); % 设置Y轴范围(若需保留Y轴对数刻度,将plot替换为semilogy即可) ylim([0 600]); % 可选:添加轴标签 xlabel('X (2的整数次幂)'); ylabel('Y值');
说明
- 用
1:length(M)作为X坐标,让每个数据点在X轴上的位置天然等间距 - 通过
xticklabels(M)把刻度显示的文字替换成实际的2的幂次数值,兼顾视觉效果和需求 - 如果需要保留Y轴的对数刻度,只需要把
plot换成semilogy,不影响X轴的等间距设置
内容的提问来源于stack exchange,提问作者Sajjad
相关产品推荐
相关产品推荐

