Matlab中如何删除由axes函数生成的多余Y轴?
解决Matlab绘图中多余Y轴的问题
嘿,我一眼就看出问题出在哪了!你代码里出现多余的Y轴,根本原因是在同一个位置重复创建了坐标轴对象——你先创建了subplot(2,2,2)的坐标轴pp,紧接着又用axes('Position',pospp)生成了ax3,这相当于在同一个位置叠了两层坐标轴,视觉上就会出现多余的Y轴啦。
给你两个简单的解决办法,任选其一就行:
方案一:直接复用已有的subplot坐标轴
完全没必要额外创建新的坐标轴,直接用subplot返回的pp来绘图和设置属性就好,修改后的代码如下:
x1 = 1:2500; y1 = 1:2500:2500^2; y2 = 1:2400:2500*2400; figure subplot(2,2,1); semilogy(x1, y1, '-', x1, y2, '-.'); set(gca,'xticklabel',{[]}); % 直接用subplot返回的坐标轴pp,不用再新建axes pp = subplot(2,2,2); semilogy(pp, x1, y1, '-', x1, y2, '-.'); % 绘图时明确指定坐标轴 set(pp,'xticklabel',{[]}); % 小图部分保持不变 ax4 = axes('Position',[0.7 0.7 0.1 0.1]); semilogy(ax4, 2000:2500, y1(2000:2500), '-', 2000:2500, y2(2000:2500), '-.');
方案二:删除多余的坐标轴对象
如果你非要保留原来的创建逻辑,那把最初的subplot坐标轴pp删掉,只留后来创建的ax3就行:
x1 = 1:2500; y1 = 1:2500:2500^2; y2 = 1:2400:2500*2400; figure subplot(2,2,1); semilogy(x1, y1, '-', x1, y2, '-.'); set(gca,'xticklabel',{[]}); pp = subplot(2,2,2); pospp = get(pp, 'Position'); delete(pp); % 删掉原来的subplot坐标轴,避免重叠 ax3 = axes('Position',pospp); semilogy(ax3, x1, y1, '-', x1, y2, '-.'); set(ax3,'xticklabel',{[]}); ax4 = axes('Position',[0.7 0.7 0.1 0.1]); semilogy(ax4, 2000:2500, y1(2000:2500), '-', 2000:2500, y2(2000:2500), '-.');
小提醒
Matlab绘图时,如果不指定坐标轴,默认会用当前活跃的坐标轴(gca),很容易出现这类重叠混乱的问题。建议养成习惯,把绘图函数(比如semilogy、plot)的第一个参数设为你要使用的坐标轴对象,这样能省掉很多麻烦~
内容的提问来源于stack exchange,提问作者ZZ32




