![MATLAB R2020a完全自学一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/483/34667483/b_34667483.jpg)
5.2 二维图形绘制
二维图形是MATLAB图形的基础,也是应用非常广泛的图形类型之一。MATLAB提供了许多二维图形绘制函数。
MATLAB基本的二维图形包括线型(Line Plots)、散点型(Scatter Plots)、条型(Bar Plots)、极坐标型(Polar Plots)及矢量图型(Vector Fields)等。单击相应的类型,就可以查看相应的用法。
本节介绍二维图形的绘制指令plot、图形的编辑、子图的绘制、交互式图形的绘制及双坐标图形的绘制等。
5.2.1 plot指令
将数对排序的一种方法是使用plot指令。该命令可以带有不同数目的参数。最简单的形式就是将数据传递给plot,但是线条的类型和颜色可以通过使用字符串来指定,这里用str表示。线条的默认类型是实线型。
下面给出plot指令的一般使用规范。
(1)plot指令使用规范一:plot(x,y)。
语句说明:以x为横坐标,y为纵坐标,按照坐标(xj,yj)的有序排列绘制曲线。
(2)plot指令使用规范二:plot(y)。
语句说明:其中y为一维实数数组,以1:n为横坐标,yj为纵坐标,绘制曲线(n为y的长度)。
(3)plot指令使用规范三:plot(z)。
语句说明:其中z为一维复数数组,以横轴为实轴,纵轴为虚轴,在复平面上绘制(real(zj),imag(zj))的有序集合的图形。
例5-4:plot指令使用示例一。
创建M文件并命名为cosfigure.m(同时存为ex5_04.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_16.jpg?sign=1739560687-G1iGDLKlQYg1k318kapNIWKmeWK8MtFj-0-a9863584de6eb16cc28802b31d189112)
运行M文件,结果如图5-6所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_17.jpg?sign=1739560687-8cwIROZ3NCJnhoCvgwFRL89aaIGCIN5n-0-c0338092ddbba32d1e75391a0be5246f)
图5-6 cosfigure.m运行结果
(4)plot指令使用规范四:plot(A)。
语句说明:绘制矩阵A的列对它的下标的图形。对于m×n的矩阵A,有n个含有m个元素的数对,或是n条有m个点的曲线,且这n条曲线均采用颜色监视器上不同的颜色绘制而成。
例5-5:plot指令使用示例二。
创建M文件并命名为magicfigure.m(同时存为ex5_05.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_18.jpg?sign=1739560687-JwNjsTbZfIdCsC0ElihppUNWXvg11Wda-0-1f8112c99f755c42aa127dc9ac7b1822)
运行M文件,结果如图5-7所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_19.jpg?sign=1739560687-gMeMuYah4yowiEXm7vBQHdfidtq48NBQ-0-ed771a093df8b0069d803138fc537556)
图5-7 magicfigure.m运行结果
(5)plot指令使用规范五:plot(x,A)。
语句说明:绘制矩阵A对向量x的图形。对m×n的矩阵A和长度为m的向量x,绘制矩阵A的列对向量x的图形;如果x的长度为n,则绘制矩阵A的行对向量x的图形。向量x可以是行向量,也可以是列向量。
(6)plot指令使用规范六:plot(A,x)。
语句说明:对矩阵A绘制向量x的图形。对于一个m×n的矩阵A和一个长度为m的向量x,对矩阵A的列绘制向量x的图形;如果x的长度为n,则对矩阵A的行绘制向量x的图形。向量x可以是行向量,也可以是列向量。
(7)plot指令使用规范七:plot(A,B)。
语句说明:对矩阵A的行绘制矩阵B的列的图形。如果A和B都是m×n的矩阵,则将绘制n条由m个有序对连成的曲线。
例5-6:plot指令使用示例三。
创建M文件并命名为figuregrid.m(同时存为ex5_06.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_20.jpg?sign=1739560687-paUXYbzNa42MXJbPHGdjFDG1ib1HPdxR-0-bcacfc9efcdf855ec0212809006fea21)
运行M文件,结果如图5-8所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_21.jpg?sign=1739560687-JOnIkB9EMaGtA6WumXOX0mwNYw0zMgcb-0-2ecebdf1a0fdda67f6f4154c32a0dff7)
图5-8 figuregrid.m运行结果
(8)plot指令使用规范八:plot(x,y,str)。
语句说明:用字符串str指定的颜色和线型对y绘制x的图形。
(9)plot指令使用规范九:plot(x1,y1,str1,x2,y2,str2,…)。
语句说明:用字符串str1指定的颜色和线型对y1绘制x1的图形,用字符串str2指定的颜色和线型对y2绘制x2的图形……每组参数值可以采用上述除复数值外的任何一种形式。str1,str2…可以省略,此时,MATLAB自动为每条曲线选择颜色和线型。
例5-7:plot指令使用示例四。
创建M文件并命名为fivecircle.m(同时存为ex5_07.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_22.jpg?sign=1739560687-uizrjHrtiWH94ShXH9x3Dgm5NnipmqHL-0-10de339a12fb0e548b890238deaa534c)
运行M文件,结果如图5-9所示。
例5-8:plot指令使用示例五。
创建M文件并命名为cosfigure.m(同时存为ex5_08.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_23.jpg?sign=1739560687-wr99rKzpobhS3sK0P05BtqqHfzWXDW1c-0-435018b1baa2e6f06fb085f8bb128c5a)
运行M文件,结果如图5-10所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_24.jpg?sign=1739560687-gkxrxOUaX6HCiTVH0EZCOyGX8m8Hg9nw-0-0130950dcfcc645e2337f98ecd6bce52)
图5-9 fivecircle.m运行结果
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_25.jpg?sign=1739560687-P3hiGZL2zs1ZFW8IfJVBpNmYQw0TpliG-0-071ebac35693065a49d718f8a876087b)
图5-10 cosfigure.m运行结果
例5-9:利用函数plot绘制包络线。
创建M文件并命名为envelope.m(同时存为ex5_09.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_26.jpg?sign=1739560687-WWfArZUP57pdPJma6Cy67CMD7Mq8vZHg-0-016fddbfb449bfb27dd8d29efdafcbbe)
运行M文件,结果如图5-11所示。
例5-10:当输入参数为向量时,利用函数plot绘制多条曲线。
创建M文件并命名为multicurves.m(同时存为ex5_10.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_27.jpg?sign=1739560687-ZWYLjattCK2KdP2ItPECiZBR27DF5o1e-0-a4bda8268dfe4a62fdae9253b6af8e72)
运行M文件,结果如图5-12所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_28.jpg?sign=1739560687-Psh1UBFc4aNOaxpHIdNVaXdwz6mPET2a-0-5a8273178b3a95edb121774232dec0a8)
图5-11 envelope.m运行结果
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_29.jpg?sign=1739560687-NLCbO00HQJ5SVDAeQdCTeeRrArzEjQR1-0-9658e2f1540c09039bac876c957b0fb2)
图5-12 multicurves.m运行结果
5.2.2 栅格
当图像需要对具体数值有更加清楚的展示时,在图形中添加栅格是十分有效的方法。在MATLAB中,grid on命令可以在当前图形的单位标记处添加栅格;grid off命令则可以取消栅格的显示;单独使用grid命令则可以在on与off状态下交替转换,即起到触发的作用。
例5-11:栅格的使用示例。
创建M文件并命名为figuregrid.m(同时存为ex5_11.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_30.jpg?sign=1739560687-OemM5hZ0ClonggWCzZy6ZFwvGSL915C2-0-0321525ae5c8f4f76b921ed90baec27c)
运行M文件,结果如图5-13所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_31.jpg?sign=1739560687-wq5PsnyflXbY9qd8Cl3wNMdiRERJwhVa-0-bb237d8dcbf7f88fca5a8c9ab2511ed1)
图5-13 figuregrid.m运行结果
5.2.3 文字说明
通常,曲线所表示的函数或数据的规律都需要进行一些文字说明或标注。图形窗口中的文本操作指令如下。
● title('text'):在图形窗口顶端的中间位置输出字符串“text”作为标题。
● xlabel('text'):在x轴下的中间位置输出字符串“text”作为标注。
● ylabel('text'):在y轴边上的中间位置输出字符串“text”作为标注。
● zlabel('text'):在z轴边上的中间位置输出字符串“text”作为标注。
● text(x,y,'text'):在图形窗口的(x,y)处写字符串“text”。坐标x和y按照与所绘制图形相同的刻度给出。对于向量x和y,字符串“text”写在(xi,yi)的位置上。如果“text”是一个字符串向量,即一个字符矩阵,且与x、y有相同的行数,则第i行的字符串将写在图形窗口的(xi,yi)位置上。
● text(x,y,'text','sc'):在图形窗口的(x,y)处输出字符“text”,给定左下角的坐标为(0.0,0.0),右上角的坐标则为(1.0,1.0)。gtext('text')通过使用鼠标或方向键,移动图形窗口中的十字光标,让用户将字符串text放置在图形窗口中。当十字光标走到所期望的位置时,用户按下任意键或单击任意按钮,字符串将会写入窗口中。
● legend(str1,str2,...pos):在当前图形上输出图例,并用说明性字符串str1、str2等做标注。其中,参数pos的可选项目如表5-1所示。
表5-1 曲线线型
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_32.jpg?sign=1739560687-MR7fUlCCgI5IIYw9XXJNXTtc2WDrr5Gz-0-11bc9e71508a6e9f0c6db55c57089bcb)
● legend(str1,str2,...,'Location','pos'):在当前图形上输出图例,并用说明性字符串str1、str2等做标注。其中,参数pos的可选项目如表5-2所示。
表5-2 图形标记
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_33.jpg?sign=1739560687-K5GtzRmqhZgCobaVcdb2zclDkHqeiOdc-0-842e7fee32f9b0da2790c34bd80c1235)
● legendoff:从当前图形中清除图例。
例5-12:图窗内文字说明示例。
创建M文件并命名为radioaxis.m(同时存为ex5_12.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_34.jpg?sign=1739560687-JoIXzA2rvjBATc2CtPWGUdcqMy3NUE0u-0-5be16cc1e5b5316a456a59b2471e9e15)
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_35.jpg?sign=1739560687-eMm10sJ05xd9kvkn9jNfIVpRMHovKiIq-0-77884e5b95c8b1f77db16ba0806f58b6)
运行M文件,结果如图5-14所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_36.jpg?sign=1739560687-VEUkrwJt1ZyEGsGlpVgkdcTkuiAEqdzY-0-19c82f9b51a483f15262368a60b0aff9)
图5-14 radioaxis.m运行结果
MATLAB中的字符串可以对输出的文字风格进行预先设置,可以预先规定的有字体、风格及大小。另外,可以进行上、下标的表示,还可以输出数学公式中经常用到的希腊字符和其他特殊字符。这些指令及特殊符号的输出方法如表5-3~表5-6所示。
表5-3 字体式样设置规则
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_37.jpg?sign=1739560687-04qameXg59YRAgwEBa6VT14ZWdWFR3r2-0-65373ac2ad229c7e4bff6f06476101e3)
表5-4 上、下标的控制指令
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_38.jpg?sign=1739560687-RGLmjsPIZQ11fwSzr1c6kJB9e5ucT0r7-0-6cb6e39909f53702b8d5fc4d5b2e0fdb)
表5-5 希腊字符的输出方法
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_39.jpg?sign=1739560687-Qx9GUTGqGPUJxFpkkHv9kPD2gWYPC8m1-0-572ffbd29f90da9192a56d0d28dc83fe)
续表
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_40.jpg?sign=1739560687-SurEjSf6cBafQb3H0SeoATKq061bmorU-0-4e748730ddbf63d11ea4d72c0d7392b9)
表5-6 其他特殊符号的输出方法
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_41.jpg?sign=1739560687-nV9a5UqEk8VMbX5aWjkwX2N5giznhX6J-0-75cc90a6a170cb217a886bf65296b26d)
5.2.4 线型、标记和颜色
当同一个图形中同时画了多条曲线时,需要使用不同的线型、标记和颜色来区分不同的曲线。
1.线型
MATLAB平台上共有5种不同线型,如表5-7所示。
表5-7 曲线线型
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_42.jpg?sign=1739560687-Btaj4APhOdH2GtimXx6zswmRCDJj2dli-0-b0ef1b3bbbf46e1d62e2270ba7bab829)
2.标记
MATLAB平台上共有14种不同的标记方式,如表5-8所示。
表5-8 图形标记
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_43.jpg?sign=1739560687-27pzwsRTPm5fpCRzrrp8TiEDyjHtHfxZ-0-d65ef811211d9d5e4d28afee7fc65066)
续表
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_44.jpg?sign=1739560687-64I8KpX7jlb9sUQOAstnttTR40OXAAr9-0-27b191f9cb9e56aaa111e6a31204d564)
3.颜色
MATLAB平台上有代号的颜色共有8种,如表5-9所示。
表5-9 曲线或标记颜色
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_45.jpg?sign=1739560687-NtzdOW4qsXcKGvVVGLDo1kxHGyY9sp5x-0-2b274766d16600dcfc648cb5a9c73c9a)
例5-13:线型、标识与颜色示例。
创建M文件并命名为multicurve.m(同时存为ex5_13.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_46.jpg?sign=1739560687-xJCTzgdsEmXOUD5WvsWIPV3px1lbseM3-0-16ac10888029c5355163cfb02c6770aa)
运行M文件,结果如图5-15所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_47.jpg?sign=1739560687-WWQYk61IizBFbSN27P3qiqvb3PqX3BAM-0-6c59dca0402071b719825c39cb61071c)
图5-15 multicurve.m运行结果
在MATLAB平台上还有一种叫作颜色映像的数据结构来代表颜色值。颜色映像定义为一个有3列和若干行的矩阵。利用0~1之间的数值,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、绿、蓝3种颜色的强度,形成一种特定的颜色。一些有代表性的RGB值如表5-10所示。
表5-10 一些有代表性的RGB值
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_48.jpg?sign=1739560687-f8RgJj7D5L8e9NUAcgMcOOvOUBa2sSrW-0-7bb0c20a57d1496690641bbf7030dbf0)
有10个MATLAB函数产生预定的颜色映像,如表5-11所示。
表5-11 颜色映像函数集
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_49.jpg?sign=1739560687-OuUQuwfsDO0yIhhQlfTJgN7IV9bVbhvx-0-976755d31f6ec32a85c16996aa8dc08b)
在默认情况下,上面所列的各个颜色映像产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接收一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红、黄……一直到白。
大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显卡可以同时显示更多的颜色。这就意味着在不同的图中,一般一次可以用3个或4个64×3的颜色映像。如果使用了更多的颜色映像输入项,则计算机必须经常在它的硬件查色表中调出输入项。例如,在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。所以,除非计算机有一次显示更多种颜色的显卡,否则最好任何一次所用的颜色映像输入项数都小于256。
5.2.5 坐标轴设置
图形坐标轴的取值范围及其刻度对图形的显示效果有着很明显的影响。在默认情况下,MATLAB通过便捷智能的函数和内部自适应设置来显示图形。
有时候,默认设置生成的图形往往达不到用户所要求的效果,或者用户只对图形中的某一部分感兴趣,这时就需要通过坐标轴控制函数,有针对性地调整和设置坐标轴的某些参数。
MATLAB提供的坐标轴控制函数如表5-12所示。
表5-12 MATLAB中的坐标轴控制函数
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_50.jpg?sign=1739560687-HsEzjrcMssheY8UrYa4Fal5Ak6N4suBW-0-4a3faed01868e8bd4480ca11ea6b48f6)
例5-14:坐标轴设置示例。
创建M文件并命名为figureaxis.m(同时存为ex5_14.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_51.jpg?sign=1739560687-XdgV4ZIbjCvxDS8fo97khY0x5ixGSNqg-0-2e09d3f67f17322492b6a643bdcede44)
运行M文件,结果如图5-16所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_52.jpg?sign=1739560687-x7ofZQNKnqye5gkAzADutDKFgUe0I9Xs-0-958d1e60d1088708d802a4050af8e8dc)
图5-16 figureaxis.m运行结果
5.2.6 图形叠绘
plot指令可以在同一次调用中画出多条曲线,此功能已经在5.2.1节中进行了介绍。在实际应用中,经常遇到在已经存在的图形上绘制新的曲线,并保留原来的曲线,MATLAB中的以下指令可以完成这项功能。
● hold on语句:语句功能为使当前轴及图形保留下来而不被刷新,并接收即将绘制的新的曲线。
● hold off语句:语句功能为不保留当前轴及图形,绘制新的曲线后,原图即被刷新。
● hold语句:语句功能为hold on语句与hold off语句的切换。
例5-15:图形叠绘示例。
创建M文件并命名为figurehold.m(同时存为ex5_15.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_53.jpg?sign=1739560687-P25858pnWybpf3RPTa40tBORJUXlpotM-0-50c2cf3a1dfbfa6dade4586974309474)
运行M文件,结果如图5-17所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_54.jpg?sign=1739560687-lJKGxUCt89EZTtjO3dxJz4AhXyT2aFGR-0-c66fdd370112ce2f29e68149bc44b054)
图5-17 figurehold.m运行结果
5.2.7 子图绘制
MATLAB允许用户在同一个图形窗中同时绘制多幅相互独立的子图,这需要应用到subplot指令,其句法格式如下。
● subplot(m,n,k):将(m×n)幅子图中的第k幅图作为当前曲线的绘制图。
● subplot('position',[left bottom width height]):在指定位置上生成子图,并作为当前曲线的绘制图。
subplot指令说明:
(1)subplot(m,n,k)指令生成的图形窗中将会有(m×n)幅子图,k是子图的编号,编号的顺序为:左上为第一幅子图,然后向右后向下依次排号。该指令产生的子图分割与占位完全按照默认值自动进行。
(2)subplot('position',[left bottom width height])指令所产生的子图的位置由用户指定,指定位置的4个元素采用归一化的标称单位,即认为图形窗的宽、高的取值范围均为[0,1],左下角的坐标为(0,0)。
(3)指令所产生的子图彼此之间相互独立,所有的绘图指令都可以在任一子图中运用,而对其他的子图不起作用。
(4)在使用subplot指令之后,如果再想绘制充满整个图形窗的图形,则应当先使用clf指令对图形窗进行清空。
例5-16:子图绘制示例。
创建M文件并命名为figuresub.m(同时存为ex5_16.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_55.jpg?sign=1739560687-BdEHxbHB3OAhGRBPAwubzgusk1OHyxfw-0-9b5b6faefc9975d15ad1c9318063264e)
运行M文件,结果如图5-18所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_56.jpg?sign=1739560687-6LCgvuHVwOT6d8lg1ohcQjbX4aBESvii-0-76327a6dbc887ea2c6930c466008750d)
图5-18 figuresub.m运行结果
5.2.8 交互式绘图
MATLAB中还设置了相应的鼠标操作的图形操作指令,分别是ginput、gtext和zoom指令。首先对这3个指令进行一般性的说明。
(1)除了ginput指令只能应用于二维图形,其余两个指令对二维和三维图形均适用。
(2)ginput指令与zoom指令配合使用,可以从图形中获得较为准确的数据。
(3)在逻辑顺序并不十分清晰的情况下,并不提倡这几个指令同时使用。
1.ginput指令
其调用格式如下。
● [x,y]=ginput(n):其功能为用鼠标从二维图形中获得n个点的数据坐标(x,y)。
使用ginput指令时需要注意的是,指令中的n应当赋值为正整数,指令中的x和y用来存放所取点的坐标。该指令运行之后,会将当前图形从后台调度到前台。同时,鼠标光标变为十字形。用户可以移动鼠标,将其定位于待取点的位置处,单击则可获得该点的数据值,然后通过相同的方式取得之后的n-1组数据值。当n组数据全部取得之后,图形窗便退回后台,回到ginput指令执行前的环境中。
2.gtext指令
其调用格式如下。
● gtext(arg):其功能为用鼠标把字符串或字符串元胞数组放置到图形中作为文字说明。
使用gtext指令时需要注意的是,运行该指令后,会将当前的图像从后台调度到前台。同时,鼠标光标变为十字形。用户可以移动鼠标,将其定位于待放置的位置处,右击,字符串将被放在紧靠十字中心点的“第一象限”位置上。
如果输入的arg是单个字符串,单击则可以一次性将所有字符以单行的形式放置在图形之中;如果arg中包含多行字符串,则每次单击可将其中的一行字符串放置在图形之中,直到将所有的字符串全部放置在图形之中后,操作才全部完成。
3.zoom指令
zoom指令的具体应用句法有如下几种格式,如表5-13所示。
表5-13 zoom指令格式
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_57.jpg?sign=1739560687-elNr56B6IPBx6MPzKepMzRK9dsN3wGyd-0-6043546546fc03b9ee0698e70e8eec03)
使用zoom指令时需要注意的是,变焦操作方式与标准的Windows缩放相同,在可变焦的当前图形上,可直接单击进行图形的放大,也可以长按鼠标左键括住需要放大的区域,放开鼠标左键之后,指定的区域则会被放大,右击则可进行图形的缩小。
默认的变焦因子是2,即单击时图形被放大一倍,右击时图形被缩小一半。
5.2.9 双坐标轴绘制
在实际应用中,常常需要把同一自变量的两个不同量纲、不同量级的函数量的变化同时绘制在同一个图形窗中。例如,在同一张图中同时展示空间一点上的电磁波的幅度和相位随时间的变化;不同时间内的降雨量和温湿度的变化;放大器的输入/输出电流的变化曲线等。MATLAB中的plotyy指令可以实现上述功能,其调用格式如下。
● plotyy(X1,Y1,X2,Y2):以左、右不同的纵轴分别绘制X1-Y1和X2-Y2两条曲线。
● plotyy(X1,Y1,X2,Y2,Fun):以左、右不同的纵轴以Fun指定的形式分别绘制X1-Y1和X2-Y2两条曲线。
● plotyy(X1,Y1,X2,Y2,Fun1,Fun2):以左、右不同的纵轴分别以Fun1、Fun2指定的形式绘制X1-Y1和X2-Y2两条曲线。
使用plotyy指令时需要注意的是,左侧的纵轴用来描述X1-Y1曲线,右侧的纵轴用来描述X2-Y2曲线。轴的范围与刻度值都是自动生成的,在进行人工设置时,使用的绘图指令与一般的绘图指令相同。
例5-17:双坐标轴绘制示例。
创建M文件并命名为doubleaxis.m(同时存为ex5_17.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_58.jpg?sign=1739560687-sHBbaQDIV5sro8Amaxwr94Ngvn5vQTaS-0-9f04a945fd4568c6d7afd4c2a7a4116f)
运行M文件,结果如图5-19所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_59.jpg?sign=1739560687-H5XMhurXiYrnn2SG9TWpCBCpBgAlgQW8-0-db27985df5d0b25a8129efece8c8dd71)
图5-19 doubleaxis.m运行结果
5.2.10 fplot绘图指令
之前应用到的plot指令,均是将用户指定的或计算得到的数据转换为图形。而在实际应用中,函数随着自变量的变化趋势是未知的,此时在plot指令下,如果自变量的离散间隔不合理,则无法反映函数的变化趋势。
fplot指令可以很好地解决以上问题,该指令通过MATLAB平台内部设置的自适应算法来动态决定自变量的离散间隔,当函数值变化缓慢时,离散间隔取大一些;当函数值变化剧烈时,离散间隔取小一些。fplot指令的调用格式如下。
● fplot(fun,limits):在limits定义的自变量的取值范围[xmin,xmax]内,或者在自变量与因变量的取值范围[xmin,xmax;ymin,ymax]内,绘制fun函数。
● fplot(fun,limits,LineSpec):在limits定义的取值范围内,在LineSpec所规定的线型、颜色、标记等属性下,绘制fun函数。
● fplot(fun,limits,tol):在limits定义的取值范围内,在tol所规定的相对误差允许范围内,绘制fun函数。
● fplot(fun,limits,tol,LineSpec):在limits定义的取值范围内,在LineSpec所规定的线型、颜色、标记等属性下,在tol所规定的相对误差允许范围内,绘制fun函数。
● fplot(fun,limits,n):在limits定义的取值范围内绘制fun函数,至少绘制n+1个点。
使用fplot指令时需要注意的是,tol为相对误差允许范围,其默认值为2e-3;n的默认值为1,即fplot指令至少绘制两个点,对n进行设置后,最大的步长限制为(xmax-xmin)/n。
例5-18:利用fplot指令绘图示例。
创建M文件并命名为sinx.m(同时存为ex5_18.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_60.jpg?sign=1739560687-Oy638K3v2Ln8D1p4epWnehKFVezJ1vD9-0-ed43d2ef26b950a480f219beb9999a79)
运行M文件,结果如图5-20所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_61.jpg?sign=1739560687-dqGY3gkF4bQckIhZhPRklqmlPWETMEKn-0-3a6b54134cd127b7162af066fd8ed080)
图5-20 sinx.m运行结果
5.2.11 ezplot绘图指令
ezplot指令用于绘制函数在某一自变量区域内的图形。与fplot指令相同的是,ezplot指令中也需要对自变量的范围进行规定,其调用格式如下:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_62.jpg?sign=1739560687-sE3fg0JPUEfPf7EQVLi12sRN3pi0DAX2-0-4766107e17aaea0ad9c46cd9875a0485)
该语句的功能为:按MATLAB默认方式(自变量范围为-2π<x<2π)绘制函数。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_63.jpg?sign=1739560687-pcMOmJXUbEBWu5AyCSNdNoALbadEyRCJ-0-66b4e1080522a47bd1cd10af618ee2cd)
该语句的功能为:设置x方向的变量范围为[min,max],y方向按MATLAB默认方式绘制函数。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_64.jpg?sign=1739560687-SCWbQCNcZoigVfdwhKDLr4XlY7xA6TeY-0-0ca0bb82eb9fe787462d1eb89d557dd0)
该语句的功能为:x方向的变量范围为[xmin,xmax],y方向的变量范围为[ymin,ymax],绘制函数。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_65.jpg?sign=1739560687-Wt0aE3LWgKWJGaNyB8OSsNnJlS8Rk7yW-0-c9cd505ba11f98eebd1f494eae9395ec)
该语句的功能为:按MATLAB默认方式(自变量范围为-2π<x<2π)绘制函数x、y。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_66.jpg?sign=1739560687-NpRtzzKMGI4GLgYwrC93bezgRn0kYsmR-0-33d4f89b3ce672814498d53db49b4c6d)
该语句的功能为:按自变量范围为[min,max]绘制函数x、y。
例5-19:利用ezplot指令绘图示例。
创建M文件并命名为ellipse.m(同时存为ex5_19.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_67.jpg?sign=1739560687-BZjJrjrmsPMIPi9AW32pCp4MPQN4OrvO-0-620b38fb9d50737e1d4960b62df94cce)
运行M文件,结果如图5-21所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_68.jpg?sign=1739560687-6SxTttnunn5bsooKOM7tjrY93DckVUcI-0-9be468bf6cd7d5aa99a5b7a4fa57f5ba)
图5-21 ellipse.m运行结果
5.2.12 特殊坐标轴绘图
前几节介绍了基本的二维绘图函数的使用,但其中无论是直角坐标系还是极坐标系,用到的坐标轴的刻度均是线性刻度。但是在很多实际情况中,数据都出现指数型的变化规律,这时如果再用线性刻度来描述曲线,则处于低次幂的部分数据无法清晰地表现出来。当然,利用5.2.9节中提到的双坐标轴绘图,对指数数据进行局部放大,则可以解决这个问题。但是在MATLAB中,还有更加简便的方式。本节介绍3个函数来解决对数数据的问题,分别是semilogx函数、semilogy函数和loglog函数。
1.semilogx函数
semilogx函数的调用格式与plot函数基本相同,此处不再赘述每一个句法的功能。
● semilogx(Y)。
● semilogx(X1,Y1,X2,Y2,…)。
● semilogx(X1,Y1,LineSpec1,X2,Y2,LineSpec2,…)。
● semilogx(…,'PropertyName ',PropertyValue,…)。
在利用semilogx函数绘制图形时,x轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogx函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
例5-20:semilogx函数与plot函数对比示例。
创建M文件并命名为logx.m(同时存为ex5_20.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_69.jpg?sign=1739560687-dfMbj5wEhY0CKCIEI6xgCiMMShmPmOwQ-0-566e79d36cc333b41ebcf775ba2e4904)
运行M文件,结果如图5-22所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_70.jpg?sign=1739560687-YMRw3pyyBIdcNwLcRDUxBvvOSsT34WHB-0-42b638b4ab28ef16cadea08e02310ee3)
图5-22 logx.m运行结果
2.semilogy函数
semilogy函数的调用格式与semilogx函数相同,在绘制图形时,y轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogy函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
3.loglog函数
loglog函数的调用格式与semilogx函数相同,在绘制图形时,x轴与y轴均采用对数坐标。
例5-21:loglog函数与plot函数对比示例。
创建M文件并命名为logxlogy.m(同时存为ex5_21.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_71.jpg?sign=1739560687-2xBAUfNxyBd63s6NBC03qGnWYYU8EFRA-0-db5d871cce473b8311df43d05ecab0cc)
运行M文件,结果如图5-23所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_72.jpg?sign=1739560687-Wlj3kredEujNojNa52hMl9l1zOc9zDiv-0-df85c2071c349e13e6a693c196c99b1b)
图5-23 logxlogy.m运行结果
5.2.13 二维特殊图形函数
在MATLAB中,除了可以通过plot函数等绘制图形,还可以通过一些函数绘制柱状图、饼状图等特殊图形。常见的二维特殊图形函数如表5-14所示。
表5-14 二维特殊图形函数
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_73.jpg?sign=1739560687-gCi8ffbUp91sP3tixWKE53seVlFw6ejK-0-687049164c3b8a943505fb25c4e56288)
表5-14中的函数均有不同的调用方法,下面通过示例向读者介绍其中几个常用的函数,其他函数的使用方法可以查阅MATLAB的在线帮助。
1.bar函数
bar函数用于绘制二维垂直条形图,用垂直条形显示向量或矩阵中的值。其调用格式如下。
● bar(y):为每一个y中的元素画一个条状。
● bar(x,y):在指定的横坐标x上画出y,其中x为严格单增的向量。若y为矩阵,则bar把矩阵分解成几个行向量,在指定的横坐标处分别画出。
● bar(...,'bar_color '):“bar_color”定义条的颜色。
● bar(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
例5-22:创建二维垂直条形图示例。
创建M文件并命名为verticalbar.m(同时存为ex5_22.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_74.jpg?sign=1739560687-UmN9NtAwOpb8bcLeH3d7alHwHCuW28FS-0-540ed43676f23b7463df17ec3212113f)
运行M文件,结果如图5-24所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_75.jpg?sign=1739560687-zyOvIUSmUAv2RftjGzVZAcpOdOIoGUOs-0-4756d1643b8c86755be79f59b6a40f19)
图5-24 verticalbar.m运行结果
例5-23:二维直方图有两种类型:垂直直方图和水平直方图。而每种类型又有两种表现模式:累计式和分组式。本例选择其中两种加以表现。
创建M文件并命名为ex5_23.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_76.jpg?sign=1739560687-MZ16FrXioNFt1vOrlgjWR9R047RoHpyC-0-bb5cbcc1a1d4f275fc57cad42d7b1093)
运行M文件,结果如图5-25所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_77.jpg?sign=1739560687-Caowl7guwE79zYSINLLlWUo4f4nxD0J6-0-2dd63b9a5be313c125cbe24ac2644d14)
图5-25 垂直直方图和水平直方图运行结果
2.pie函数
pie函数用于绘制饼图,其调用格式如下。
● pie(x):绘制参数x的饼图。
● pie(x,explode):explode是与x同维的矩阵,若其中有非零元素,则x矩阵中相应位置的元素在饼图中对应的扇形将向外移出一些,加以突出。
● pie(...,labels):labels用于定义相应块的标签。
● pie(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
● h=pie(...):返回绘制的饼图相关的句柄。
例5-24:创建二维饼图和三维饼图示例。
创建M文件并命名为ex5_24.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_78.jpg?sign=1739560687-s5h8yHzLzPkmRRTTyRubdFkxP475cvdH-0-a02e679b37a0689b547ef20ce2efe79e)
运行M文件,结果如图5-26所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_79.jpg?sign=1739560687-3g7o022kPaRz3cOhjBQm8e9MWYRYRdrY-0-35624ebbacf7a758aa878e92b4cbd337)
图5-26 二维饼图和三维饼图程序运行结果
3.hist函数
hist函数用于绘制条形直方图,可以显示出数据的分布情况。所有向量y中的元素或者矩阵Y的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示。条形直方图中的x轴反映了数据y中元素数值的范围,直方图的y轴显示出参量y中的元素落入该组的数目。其调用格式如下。
● n=hist(y):把向量y中的元素放入等距的10个条形中,且返回每一个条形中的元素个数。若y为矩阵,则该命令按列对y进行处理。
● n=hist(y,x):参量x为向量,把y中元素放到m(m=length(x))个由x中元素指定的位置为中心的条形中。
● n=hist(y,nbins):参量nbins为标量,用于指定条形的数目。
● [n,xout]=hist(...):返回向量n与包含频率计数与条形的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图。
● hist(...):生成直方图,但不产生输出。
● hist(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
例5-25:绘制直方图示例。
创建M文件并命名为ex5_25.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_80.jpg?sign=1739560687-5FMPrH6rd080nXLusioDB6txWmb9ggLe-0-a8e5a630723dd6aa9e8821c65c0a20c8)
运行M文件,结果如图5-27所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_81.jpg?sign=1739560687-l1nqYKAqODsYywtFMnH01mE2BiQeS6R6-0-0543af4338c970135ef0b2787f6430e0)
图5-27 直方图程序运行结果
4.scatter函数
scatter函数用于绘制散点图,其调用格式如下。
● scatter(x,y):以x、y的值为横、纵坐标,绘制散点图。
例5-26:绘制散点图示例。
创建M文件并命名为ex5_26.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_82.jpg?sign=1739560687-chkADU6FXVAuUhun8vX6wf56eOdc68As-0-6089063fa130c99cf2214a722b406d1c)
运行M文件,结果如图5-28所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_83.jpg?sign=1739560687-V7DPpWFKgyCXDs4RFvMFqKxtK5nwzB6z-0-aeb62580ec822e3cc93132a47a980a0f)
图5-28 散点图程序运行结果