使用MATLAB画上下两个横坐标与左右两个纵坐标

本文详细介绍了如何在MATLAB中创建上下两个横坐标或左右两个纵坐标的图形。通过设置坐标轴位置、刻度和标签,实现同一曲线对应两个坐标轴或两条曲线分别对应两个坐标轴。新版本的MATLAB提供了tiledlayout和yyaxis函数,简化了绘制过程。示例代码展示了在MATLAB 2016B及更高版本中实现这些功能的方法。
摘要由CSDN通过智能技术生成

上下两个横坐标

有时候画图会使用不同单位画在同一个曲线图中,希望两个单位分布在上下两个横坐标中。示例使用MATLAB 2016B

同一条曲线对应两个坐标轴

使用位置设置让两个坐标系叠在一起:
position = [0.15 0.2 0.75 0.6];
set(gca,‘xaxislocation’,‘top’,‘yaxislocation’,‘left’,‘position’,position);
sin\theta

theta_degree = 0:360;
theta_rad = theta_degree/180*pi;
position = [0.15 0.2 0.75 0.6];
plot(theta_degree,sin(theta_rad),'Linewidth',4);   %这里画的被后面的覆盖了
set(gca,'xaxislocation','top','yaxislocation','left','position',position);
set(gca,'XTick',0:30:360);           %设置x轴刻度
xlabel('Degree');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');
axes;
plot(theta_rad,sin(theta_rad),'Linewidth',4);hold on
xlabel('Rad');
set(gca,'xaxislocation','bottom','yaxislocation','right','position',position);
set(gca,'yticklabel',[]);
h = legend('sin\theta');
set(h,'box','off');			%不画方框
set(gca,'Linewidth',2,'Fontsize',20,'box','on');

两条曲线分别对应两个坐标轴

注意使用’color’,'none’将坐标系背景设置为透明,使得上一个坐标系能够显示.同时还要注意,坐标系的框要去掉,‘box’,‘off’,不然坐标刻度会叠在一起。
sin\theta sin2\theta

theta_degree = 0:360;
theta_rad = theta_degree/180*pi;
position = [0.15 0.2 0.75 0.6];
plot(theta_degree,sin(theta_rad),'Linewidth',4);
set(gca,'xaxislocation','top','yaxislocation','left','position',position);
set(gca,'XTick',0:50:360);           %设置x轴刻度
xlabel('Degree');
set(gca,'Linewidth',2,'Fontsize',20,'box','off');
axes;
plot(theta_rad,sin(theta_rad*2),'Linewidth',4,'color','k');
xlabel('Rad');
set(gca,'xaxislocation','bottom','yaxislocation','right','color','none','position',position);
set(gca,'yticklabel',[]);
set(gca,'Linewidth',2,'Fontsize',20,'box','off');

但是这样两条曲线就不能legend到一起了,因为变成了两个坐标系,只是通过设置位置重合在一起。解决办法就是像上一个一样,将第一个坐标系覆盖,color 不要设置为透明,把所有图都画到第二个坐标系。如下:
在这里插入图片描述

theta_degree = 0:360;
theta_rad = theta_degree/180*pi;
position = [0.15 0.2 0.75 0.6];
plot(theta_degree,sin(theta_rad),'Linewidth',4);
set(gca,'xaxislocation','top','yaxislocation','left','position',position);
set(gca,'XTick',0:50:360);           %设置x轴刻度
xlabel('Degree');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');
axes;
plot(theta_rad,sin(theta_rad),'Linewidth',4);hold on
plot(theta_rad,sin(theta_rad*2),'Linewidth',4,'color','k');
xlabel('Rad');
set(gca,'xaxislocation','bottom','yaxislocation','right','position',position);
set(gca,'yticklabel',[]);
h = legend('sin\theta','sin2\theta');
set(h,'box','off');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');

适用于R2019b及更高版本的新方法

https://ww2.mathworks.cn/help/matlab/creating_plots/graph-with-multiple-x-axes-and-y-axes.html

使用tiledlayout函数代替了上述手动编写position的功能,tiledlayout函数与subplot函数类似,但是可以自由配置绘图,功能更多。

theta_degree = 0:360;
theta_rad = theta_degree/180*pi;
% position = [0.15 0.2 0.75 0.6];
t = tiledlayout(1,1);
ax1 = axes(t);
% plot(theta_degree,sin(theta_rad),'Linewidth',4);
plot(ax1,theta_degree,sin(theta_rad),'Linewidth',4);
% set(gca,'xaxislocation','top','yaxislocation','left','position',position);
set(gca,'xaxislocation','top','yaxislocation','left');
set(gca,'XTick',0:60:360);           %设置x轴刻度
xlabel('Degree');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');
% axes;
ax2 = axes(t);
% plot(theta_rad,sin(theta_rad),'Linewidth',4);hold on
% plot(theta_rad,sin(theta_rad*2),'Linewidth',4,'color','k');
plot(ax2,theta_rad,sin(theta_rad),'Linewidth',4);hold on
plot(ax2,theta_rad,sin(theta_rad*2),'Linewidth',4,'color','k');
xlabel('Rad');
% set(gca,'xaxislocation','bottom','yaxislocation','right','position',position);
set(gca,'xaxislocation','bottom','yaxislocation','right');
set(gca,'yticklabel',[]);
h = legend('sin\theta','sin2\theta');
set(h,'box','off');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');

结果与上图相同。

左右两个纵坐标

使用上述方法同样可以实现两个纵坐标画到一个图,但是MATLAB提供了另一个方便的函数来实现:yyaxis left和yyaxis right (之前的MATLAB版本里面是通过plotyy函数实现)。

theta_degree = 0:360;
theta_rad = theta_degree/180*pi;
position = [0.15 0.2 0.75 0.6];
yyaxis left
plot(theta_degree,sin(theta_rad),'Linewidth',4);hold on

yyaxis right
plot(theta_degree,sin(theta_rad*2),'Linewidth',4);
xlabel('Degree');
set(gca,'XTick',0:50:360);           %设置x轴刻度
h = legend('sin\theta','sin2\theta');
set(h,'box','off');
set(gca,'Linewidth',2,'Fontsize',20,'box','on');

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值