【Matlab学习手记】Matlab多个坐标轴实现技巧


    Matlab2016B版本提供了一个plotyy函数,可以提供左右两个纵坐标轴,如果需要三个纵坐标轴甚至多个,可参考以下方式:

 

 

    这种方式可以修改任何一条线的属性和坐标轴属性,极为方便。

代码如下:

clear; clc; close all;
%% yyaxis 官方帮助文档 demo
x = linspace(0, 10, 100);
y1 = 2*sin(3*x);
y2 = sin(3*x) .* exp(0.5*x);
%% 三个纵坐标演示,更多纵坐标可以按照此方法类推
y3 = 10*cos(3*x);
% 三条线绘制到一起,注意数据都标准化到 y1 范围
maxY1 = max(y1);
maxY2 = max(y2);
maxY3 = max(y3);
minY1 = min(y1);
minY2 = min(y2);
minY3 = min(y3);
% 归一化
newY2 = (y2 - minY2)/(maxY2 - minY2);   
% 反归一化
newY2 = newY2*(maxY1 - minY1) + minY1;  
newY3 = (y3 - minY3)/(maxY3 - minY3);
newY3 = newY3*(maxY1 - minY1) + minY1;
% 画线
% 控制 axes 的大小和位置,注意是相对于figure的,范围为[0, 1]
h1 = axes('position', [0.1 0.1 0.5 0.8]);   
plot(x, y1, 'k', x, newY2, 'r', x, newY3, 'ob--')
ylabel('line1');
% 绘制另外两个空的坐标轴
h2 = axes('position', [0.65 0.1 0.005 0.8]); 
% 重复绘制,曲线颜色用白色,和figure背景色一致,看不出来即可
plot(x, y2, 'w')
% 颜色,位置,曲线标签
set(h2, 'YColor', 'r', 'YAxisLocation', 'right', 'XTick', [])
% 边界显示不清楚,所以画一条线
hold on
limX2 = get(h2, 'Xlim');
limY2 = get(h2, 'Ylim');
plot([limX2(2), limX2(2)], limY2, 'r');
hold off
% 取消边框
box off
ylabel('line2');
%
h3 = axes('position', [0.75 0.1 0.005 0.8]); 
plot(x, y3, 'w')
set(h3, 'YColor', 'b', 'YAxisLocation', 'right', 'XTick', [])
hold on
limX3 = get(h3, 'Xlim');
limY3 = get(h3, 'Ylim');
plot([limX3(2), limX3(2)], limY3, 'b');
hold off
box off
ylabel('line3');
% figure背景设置成白色
set(gcf, 'color', 'white'); 
% 取消坐标轴的颜色,和figure统一
set(h1, 'color', 'none');
set(h2, 'color', 'none');
set(h3, 'color', 'none'); 

  • 15
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值