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
相关产品推荐
相关产品推荐

