You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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),很容易出现这类重叠混乱的问题。建议养成习惯,把绘图函数(比如semilogyplot)的第一个参数设为你要使用的坐标轴对象,这样能省掉很多麻烦~

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

火山引擎 最新活动