九、基础绘图
9.1 plot()
plot函数是matlab中用于作图的函数,常用格式为:plot(x,y),x代表着横坐标,y代表纵坐标,一般情况下如果是画一组连续的图,x和y一般都是矩阵
还有一种格式:plot(y),如果只给一个参数,那么这个参数默认是代表纵坐标,而横坐标的值默认是1,2,3......举个例子,我们输入plot(cos(0:pi/20:2*pi));,做出来的图是这样的
图9-1 plot(cos(0:pi/20:2*pi))
9.2 hold on/off
如果我们写两个plot函数,plot(cos(0:pi/20:2*pi));plot(sin(0:pi/20:2*pi));,他会不会把这两个图画出来,答案是不会,因为matlab在执行代码的时候,后面的画图会把前面的画图清空掉,所以只会有一个图画出来,那如果想把这两个函数的图都画出来,应该怎么做,下面给出代码
图9-2 hold on
也可以先画一个图,然后hold on,然后再画一个图,hold on的顺序可以变
9.3 plot style
我们还可以给图加上我们想要的样式,调用格式:plot(x,y,’str’);,str的位置是我们用的参数,具体有哪些参数,见下图
图9-3 plot type
示例:
图9-4 示例1
更多的type,可以访问mathworks网站内查看:https://cn.mathworks.com/help/matlab/ref/linespec.html?s_tid=gn_loc_drop
9.4 legend()
光有图,没有说明标签也不行,所以我们需要用到legend这个函数,以一个例子来说明,我们首先做四个函数的图像
图9-5 示例2
我们看这个图很不直观,因为缺少了标签说明,下面我们就给他加上,代码为:legend(‘sin(x)’,’cos(x)’,’Sigmoid’,’Gauss function’);,他会根据你plot函数的顺序,依次给对应的线标上对应的标签
图9-6 legend函数
9.5 title() and ?label()
到现在为止,其实我们这个图还不算完整,还缺少横纵坐标的说明,以及标题,所以接下来我们就要用到几个函数来完善它:title()、xlabel()、ylabel()、zlabel()、下面给出示例
图9-7 坐标以及标题
9.6 text() and annotation()
如果我们需要在图像中加入说明性的文本和某些图形比如说箭头,就会分别用到两个函数,一个是text(),一个是annotation(),下面给出示例图
图9-8 示例3
我们首先观察这个函数的横坐标,是从0到3,所以我们要用代码x = linspace(0,3);即可,这里y的函数我也直接给出来y = x.^2.*sin(x);,再看图上,有一天线段x = 2,他需要用到line函数,通常其调用格式为:line([x起始坐标,x终止坐标],[y起始坐标,y终止坐标]);,所以如果要画出我们图上的这条直线,代码就应该是line([2,2][0,x.^2.*sin(2)]);
有了以上的函数,我们看看做出的图是什么样的
图9-9 示例4
下面我们就要开始讲解如何在图上做出文本以及箭头标志
首先我们先考虑一个问题,那一串积分符号是如何打出来的?这里大家如果有latex基础应该会知道,没有的话我直接给出代码不用过多解释,了解一下即可
图9-10 str本文
文本有了以后,我们需要用text()函数写进去,其调用格式为:text(x坐标,y坐标,str,’Interpreter’,’latex’);,后面的’Interpreter’,’latex’这个是固定格式,填上去就行了。
接下来我们要用到annotation()函数画箭头,其调用格式为:annotation(‘shape’,’x’,[x起始位置,x终止位置],’y’,[y起始位置,y终止位置]);,这个annotation函数用起来比较复杂,我把参数一个一个讲,首先是’shape’,这个参数可以有很多值,具体见下表
shape参数 | 说明 |
---|---|
line | 线 |
arrow | 箭头 |
doublearrow | 双箭头 |
textarrow | 带文本框的箭头 |
shape参数讲完了,然后就是这个x,y坐标的问题,这里要注意,这个函数中的坐标并不是我们图像里对应的坐标,而是我们进行归一化以后的坐标,什么叫归一化?假设一个图的宽w,高h,坐标[x,y],归一化以后的坐标就是[x/w,y/h]
由此我们就能做出这个箭头了,下面给出完整代码
图9-11 annotation and text
9.7 Figure Adjustment
其实matlab画图远不止这点内容,还有很多可以修改的部分,下面的内容我们就是讲,如何优化一个图
首先优化一个图,我们可以修改这个图的哪些属性?Font、Font size、Line width、Axis limit、Tick position、Tick label......
那么我们如何修改这些属性呢?
图9-12 编辑图形属性
如果你觉得这些还不够,你可以选择更多属性
图9-13 更多属性
9.8 Multiple Figures
记得我们一开始讲过如何将两个函数画在同一张图上,当时用的方法是hold on/off,那么现在问题来了,如果我想画两个函数,在两张图上,应该怎么做呢?下面给出代码
图9-14 figure
其实只需要在每个plot函数前面,加上figure即可
9.9 subplot()
如果说,我现在要求在一个figure,也就是一个画布上,画很多不同的图,应该怎么画,要用到的函数就是subplot(),其调用格式为:subplot(m,n,x);,下面用一张图来解释其中的参数
图9-15 subplot
下面我们给个示例,让大家更清楚的了解subplot的用法
图9-16 示例5
为什么我们画的同一张图,x,y的值都是一样的,但是显示出来的图像却不一样?有兴趣的读者可以百度看看axis的作用就能明白了,这里我就不做多讲解了
9.10 Save Figures
我们有时候花完了图,想要保存,这时候就要用打saveas函数,其调用格式为:saveas(gcf,’filename’,’formattype’);,gcf就是你当前图像的默认的”名字”,filename也不用多说,就是你给你保存的图像起个名字,关键是这个formattype,它其实有很多参数,见下图
图9-17 formattype
下面给个示例
图9-18 示例6