使用第三方axes0函数时如何让MATLAB图形网格正常显示?
网格不显示的原因
axes0的实现逻辑是:隐藏MATLAB原生坐标轴的默认边框、刻度,单独新建图层绘制你指定位置的轴线、标签,以此实现任意位置的坐标原点效果。
你原有代码的操作刚好踩了两个坑,直接导致网格失效:
- 调用顺序反了:先开
grid on再跑axes0,而axes0执行时会自动把原生坐标轴的网格属性重置为关闭。 - 句柄没存:调用完
axes0之后,当前活动坐标轴(gca)会被切到新建的自定义图层上,这时候直接开网格,作用的对象根本不是承载你画的曲线的那个原生坐标轴。
正确设置步骤
- 等所有绘图、标签、
axis equal这类基础设置做完,先把原生坐标轴的句柄存下来,避免后面句柄切换找不到对象。 - 先跑
axes0完成自定义坐标轴的渲染。 - 对着之前存好的原生坐标轴句柄开网格,同时调整图层层级,避免网格被自定义的轴线挡住。
修改后的测试代码
clear all; clc; % 绘制曲线 gbr1 = ezplot('x^2-y-0.2=0', [-1.5 1.5 -1.5 1.5]); set(gbr1, 'color', 'r', 'linewidth', 2); hold on; gbr2 = ezplot('y^2-x-0.3=0', [-1.5 1.5 -1.5 1.5]); set(gbr2, 'color', 'r', 'linewidth', 2); % 基础样式设置 axis equal; title(''); xlabel('x'); ylabel('y', 'rotation', 0); % 关键:提前存原生坐标轴的句柄 ax_native = gca; % 先执行自定义坐标轴设置 axes0('origin', 'topright'); % 给原生坐标轴开网格,按需调整图层层级 set(ax_native, ... 'XGrid', 'on', ... 'YGrid', 'on', ... 'Layer', 'bottom'); % 想让网格浮在轴线上方就改成'top'
补充说明
- 要改网格的颜色、虚线样式的话,直接在上面的
set里加对应属性就行,比如'GridColor', [0.8 0.8 0.8], 'GridLineStyle', '--'。 - 千万别在
axes0之前开grid on,设置会直接被axes0清掉。
内容的提问来源于stack exchange,提问作者Ongky Denny Wijaya
相关产品推荐
相关产品推荐

