semilogy、loglog设置y轴对数刻度失效,同画布绘制多组误差曲线异常
问题原因
- 核心是**
hold on的调用时机不对**:空白figure窗口下先执行hold on时,Matlab会默认初始化线性刻度的坐标轴,后续调用semilogy/loglog时,已锁定的坐标轴属性不会被自动覆盖 - 次要排查点:检查
errors数组是否包含0、负数或者NaN值,对数刻度无法正常渲染非正数值的点 - 额外优化点:原代码把
title和grid写在循环内部,每次迭代都会重复执行冗余操作,移到循环外侧更合理
修复方案
方案1:调整hold on调用顺序,第一次绘图后再锁定坐标轴
figure for i = 3:7 [coord_ctrs, errors] = ApproxAdap1D(i); semilogy(coord_ctrs, errors); if i == 3 hold on % 第一次绘图完成后,轴属性已经是对数刻度,再锁定画布 end end title("Senkung des RMS Fehlers"); grid on; hold off; % 绘图完成后释放锁定
方案2:手动强制设置y轴为对数刻度,适配所有场景
如果调整调用顺序后仍不生效,可直接指定坐标轴刻度类型,不受hold状态影响:
figure hold on ax = gca; ax.YScale = 'log'; % 直接将y轴设为对数刻度 for i=3:7 [coord_ctrs, errors] = ApproxAdap1D(i); plot(coord_ctrs, errors); % 此处直接用plot也可正常显示对数刻度 end title("Senkung des RMS Fehlers"); grid on; hold off;
内容的提问来源于stack exchange,提问作者Odess4
相关产品推荐
相关产品推荐

