使用MATLAB画上下两个横坐标或者左右两个纵坐标
- 上下两个横坐标
-
- 同一条曲线对应两个坐标轴
- 两条曲线分别对应两个坐标轴
- 左右连个纵坐标
上下两个横坐标
有时候画图会使用不同单位画在同一个曲线图中,希望两个单位分布在上下两个横坐标中。示例使用MATLAB 2016B。
同一条曲线对应两个坐标轴
使用位置设置让两个坐标系叠在一起:
position = [0.15 0.2 0.75 0.6];
set(gca,‘xaxislocation’,‘top’,‘yaxislocation’,‘left’,‘position’,position);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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’,不然坐标刻度会叠在一起。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 不要设置为透明,把所有图都画到第二个坐标系。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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'); |
左右连个纵坐标
使用上述方法同样可以实现两个纵坐标画到一个图,但是MATLAB提供了另一个方便的函数来实现:yyaxis left和yyaxis right (之前的MATLAB版本里面是通过yyplot函数实现)。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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'); |