![98698ac15d2be819c066dcccec65bc2f.png](https://i-blog.csdnimg.cn/blog_migrate/cb00e2a5ea98ceca495a3855f0d5a622.jpeg)
Matlab在绘图方面非常自由,正规图、私人定制图都不在话下。双y轴图是比较常用的,即同一个x对应两个不同范围的y,Matlab提供了plotyy函数,后续新版本推荐yyaxis函数来代替,相比plotyy函数yyaxis函数更加自由、方便。那么问题来了,一个x对应三个或更多不同范围的y值时怎么办,下面请看我表演。
先看yyaxi的官方帮助文档提供的demo,代码和效果图如下:
x
![f4709d8e86e87fbbb8739a6d7ca5f298.png](https://i-blog.csdnimg.cn/blog_migrate/ffdbfbce5b54a2ab7588754ac83ce99b.png)
在这个基础上,再添加一条曲线,将三个不同范围的y绘制在一个axes里。下面是完整的代码,自行消化、吸收然后化为己用。如果写的不清楚,私聊我提供意见,不胜感激,希望用我的方法能唤醒你的智慧。
% 多y值演示
![bc85480ad602c5a67fefd9f3389a61a0.png](https://i-blog.csdnimg.cn/blog_migrate/b61a71cd6ee429ebb7f29d02867e36fd.png)
注意点
以下两段代码,2016B可以忽略,2018B上有点问题。
hold
![0fe378b25143ae184dec847425fec7ca.png](https://i-blog.csdnimg.cn/blog_migrate/1ecc17b707ae407c2cd5c4c5940128ef.png)
解决这个问题的方法也简单,在x最大值处绘制一条线来弥补空白。
【秘籍】
- 不同范围的y值统一到同一个水平,比如以第一个y1值为参考,具体的操作方法见代码,分两步走:归一化和反归一化,用到了每组y的最大最小值,反归一化是将归一化后的y映射到y1的范围;
- 新建axes专门做y轴,显示数据的真实范围,其中的细节处理见代码,如曲线颜色、背景颜色、标签、刻度位置、边框等等;
- 异常情况处理,不要慌,如上面的2018B出现的边框显示不清问题,我想到的解决方法就是在这个位置画一条线来弥补。