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

MATLAB yyaxis双y轴绘图如何设置XTick仅显示整数刻度

问题原因

你原来的方案失效有两个核心原因:

  • 每次循环调用plot函数时,MATLAB默认触发坐标轴刻度自动调整逻辑,第一次手动设置XTick后XTickMode会变为manual,后续X轴范围扩大时刻度不会自动同步更新,就出现了你说的刻度固定为[0,1]的问题
  • 直接对当前自动生成的XTick做取整去重,会受自动生成的小数刻度限制,无法匹配动态变化的X轴范围

可行解决方案

直接根据当前X轴的实际范围生成整数刻度即可,修改后的完整可运行代码如下:

figure('Position', get(0, 'Screensize'));

max_iter = 100;
A_history = nan(1,max_iter); B_history = nan(1,max_iter);
for iter = 1 : max_iter
    yyaxis left;
    A_history(iter) = randn(1);
    plot(A_history(1:iter), '-ob', 'LineWidth', 0.9, 'MarkerSize', 4.5, 'MarkerFaceColor', 'b');
    ylabel('first yaxis');

    yyaxis right;
    B_history(iter) = randn(1);
    plot(B_history(1:iter), '-or', 'LineWidth', 0.6, 'MarkerSize', 3, 'MarkerFaceColor', 'r');
    ylabel('second yaxis');
    
    % 新增修改XTick的代码
    ax = gca;
    x_lim = xlim(ax);
    % 直接生成覆盖当前X轴范围的所有整数刻度
    ax.XTick = floor(x_lim(1)) : 1 : ceil(x_lim(2));
    pause(1);
end

如果你不需要X轴显示0刻度,也可以直接根据迭代次数设置刻度,把上面的设置代码替换为ax.XTick = 1:iter;即可,效果和上面的方案一致,逻辑更直观。

效果说明

  • 第1次迭代时X轴范围是0到1,生成的刻度为[0,1],符合需求
  • 第2次迭代时X轴范围是1到2,生成的刻度为[1,2]
  • 后续迭代会自动跟随X轴范围扩展生成对应的整数刻度,不会出现固定不动或者显示小数的问题

内容的提问来源于stack exchange,提问作者livemyaerodream

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:05