You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:36:04