MATLAB中hold on命令导致坐标轴XLim、YLim属性调整异常问题
问题原因解释
你的初步推断完全正确,hold on默认仅作用于最后创建的hAxes4坐标轴,该异常是Matlab绘图属性的默认规则共同作用的结果,具体逻辑如下:
- 你在创建完4个坐标轴后执行
hold on,等价于执行hold(gca, 'on'),仅会修改当前激活坐标轴(即最后创建的hAxes4)的NextPlot属性为add,其余3个坐标轴的NextPlot属性仍为默认值replace。 imshow函数在不同NextPlot属性下的行为完全不同:- 对于
NextPlot = replace的前3个坐标轴:imshow会完全重置坐标轴的所有显示属性,自动将XLim、YLim设为刚好适配200×200图像的范围,同时固定坐标轴纵横比,因此显示完全正常。 - 对于
NextPlot = add的hAxes4:imshow不会重置坐标轴属性,仅将图像作为新的绘图对象添加到坐标轴中。此时hAxes4的XLimMode、YLimMode仍为默认的auto,Matlab会自动调整坐标轴范围容纳新增的图像,且自动调整时会将边界对齐到规整的刻度间隔,200的上限会被扩展到默认步长为50的下一个整值250,最终出现XLim/YLim变为[0 250]的异常现象。
- 对于
修复方案
如果需要给所有坐标轴开启保持模式,需要在每个坐标轴创建完成后单独指定目标坐标轴执行hold操作,示例如下:
hAxes1 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 50 350 200 200 ] ); hold(hAxes1, 'on'); % 其余三个坐标轴同理单独设置hold
内容的提问来源于stack exchange,提问作者Shaobin Jiang
相关产品推荐
相关产品推荐

