如何在MATLAB中压缩X轴指定区域优化数值方法对比图
解决MATLAB绘图中X轴远点压缩重要区域的问题
针对你遇到的X轴存在超大数值点导致小数值区域被挤压的问题,最直接有效的方案是将X轴设置为对数刻度,这样可以自动压缩大数值区间的显示占比,同时拉伸小数值区间,让重要数据点清晰展示。
方案1:使用loglog函数替换semilogy
loglog会同时将X轴和Y轴设置为对数刻度,完美适配你的数据分布(X值呈倍数增长,Y值为误差项也适合对数展示):
x1=[12*4 24*8 48*16 96*32 192*64]; x2=[12*4 19*6 21*7 24*8 28*9]; x3=[18*6 24*8 33*11 39*13 45*15 51*17]; x4=[18*6 24*8 33*11 39*13 45*15 51*17]; U1=[7.4207e-02 1.3801e-02 5.5384e-03 1.5280e-03 3.9070e-04]; U2=[4.6278e-01 5.1786e-02 2.8978e-02 1.0437e-02 1.5375e-03]; U3=[3.7161e-01 1.2637e-01 1.6715e-02 4.5160e-03 1.3843e-03 6.0238e-04]; U4=[4.0301e-01 1.3381e-01 1.7245e-02 4.7084e-03 1.4937e-03 6.4130e-04]; % 替换semilogy为loglog,保留原有样式参数 loglog(x1,U1,'mo-', 'MarkerFaceColor','b', 'MarkerEdgeColor','c','LineWidth',2); hold on loglog(x2,U2,'bd-', 'MarkerFaceColor','b', 'MarkerEdgeColor','g','LineWidth',2); loglog(x3,U3,'ks-', 'MarkerFaceColor','b', 'MarkerEdgeColor','r','LineWidth',2); loglog(x4,U4,'^-', 'MarkerFaceColor','r', 'MarkerEdgeColor','y','LineWidth',2); xlabel('N','fontsize',20) ylabel('L_{\infty}','fontsize',20) legend('HWCM','MQ-MCM', 'IMQ-MCM','HIMQ-MCM'); hold off % 避免后续绘图冲突
方案2:保留semilogy,手动设置X轴为对数刻度
若希望保持Y轴半对数样式,仅修改X轴,可在原代码末尾添加以下设置:
% 原绘图代码不变,添加X轴对数刻度设置 set(gca, 'XScale', 'log'); % 可选:自定义X轴刻度,让小数值区域刻度更密集 set(gca, 'XTick', [48, 100, 200, 500, 1000, 5000, 12000]); set(gca, 'XTickLabel', {'48','100','200','500','1000','5000','12288'});
原理说明
对数刻度的核心是将数值的比例关系转换为轴上的线性距离:
- 小数值区间(如48到867)的比例跨度大,在对数轴上会被拉伸,数据点间距变大,便于观察;
- 大数值点(12288)与前一个点(3072)的比例跨度小,在对数轴上的显示间距会被压缩,不会占据过多绘图区域。
内容的提问来源于stack exchange,提问作者Fahim
相关产品推荐
相关产品推荐

