5.1.2 实际操作中的一些重要问题
例4:画多条曲线在同一figure上。
例如,输入如下程序:
此时,只输出图5-5所示的曲线。
图5-5 画多条曲线在同一figure上,但只能显示出一条曲线
为什么会这样呢?因为plot(x,yl,'k-o')的结果被覆盖了。究其原因,是因为MATLAB绘图时,是绘在当前的figure上的(至于figure的概念,将在后文详述)。如果当前没有figure,则新产生一个figure。所以,当第一个plot运行时,新产生了一个figure,并绘了曲线;而当第二个plot运行时,因为有一个figure存在,且为当前figure,则直接绘在该figure上,将前面的曲线覆盖掉了。
那么,如何才能不被覆盖呢?可以在绘制第二个曲线前,新产生一个figure 。
例5:在绘制曲线前产生一个新的figure 。
在第二个曲线绘制前,用figure命令产生一个新的figure,则第二条曲线绘制在新产生的figure上,如图5-6所示。在MATLAB的figure窗口上可以看到,两个figure分别标上了“figure 1”和“figure 2 ”。
图5-6 绘图前新产生figure的效果
(a)figure 1上的曲线;(b)figure 2上的曲线
也可以将曲线画在同一个figure的不同区域上,这就要用到subplot函数。
例6:将曲线绘制在同一图形的不同区域上。
输出结果如图5-7所示。
图5-7 同一个figure上的两条曲线
subplot是将一个figure切割成若干小绘图区域(实际上是MATLAB的Axes函数)。其具体用法读者可以自行学习。
如果想将不同曲线绘制在同一figure上,又不想将前面的曲线覆盖掉,可以用hold函数将figure锁住。
事实上,MATLAB中的figure有一个属性:NextPlot,这个属性有两个值,分别为add和replace。默认情况下,其值为replace。
hold on表示将NextPlot属性设置为add,而hold off表示将NextPlot属性设置为replace。
例7:hold的作用。
输出结果如图5-8所示。其效果与图5-4一样。
图5-8 两条曲线绘制在同一图形上
对比图5-4与图5-8,可以发现这两个图效果完全相同,也就是说,这两种方法都可以实现将不同曲线绘在同一图形上。但有些时候,曲线也需要一个一个绘制。例如,要绘制20条类似的曲线,如果按例3中的方法来绘制则太麻烦了,而用例7中的方法,则可以通过一个循环语句完成这个功能。有时候,不同的曲线绘在同一张图中是有问题的,如例8所示。
例8:将值域相差很大的两条曲线绘制在同一图上。
输出结果如图5-9所示。
图5-9 值域相差很大的两条曲线
可见,由于y2的值域远大于y1的值域,使得y1在图中被压制,其变化非常不明显。此时,可用双y轴图改变这一困境,即让y1和y2使用不同的y轴。MATLAB中的plotyy函数可以绘制双y轴图。
例9:双y轴图形绘制。
输出结果如图5-10所示。
可见,图5-10中有两个y轴,可以有效表示两个值域差别很大的函数的变化趋势。至于具体如何应用plotyy,以及如何将图中的曲线设置成自己想要的颜色、线条及符号,请查阅plotyy的“Help”并参照本书后面的内容(句柄图形的部分)。
图5-10 双y轴图形
网络上有网友还提供了plotyyy函数,可以绘制三y轴函数,如图5-11所示。
图5-11 三y轴图形