![MATLAB GUI程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/836/26793836/b_26793836.jpg)
3.4 特殊二维图形的绘制
与数值计算和符号计算相比,图形的可视化技术是数学计算人员所追求的更高级的一种技术,因为对于数值计算和符号计算来说,不管计算的结果是多么得准确,人们往往无法直接从大量的数据和符号中体会它们的具体含义。
1.特殊坐标系的二维图形函数
1)semilogx函数
semilogx函数用于对x轴按对数比例绘数据图,其他与plot函数类似。
【例3-18】 semilogx函数示例一。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P106_5439a.jpg?sign=1739672366-WE2xaAT3EKlgdT2kWLqb4pMuQtqbjkcb-0-33f8b180550d0bdaa7dde2ca770e4266)
运行结果如图3-19所示。
【例3-19】 semilogx函数示例二。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P107_5457a.jpg?sign=1739672366-8yoxKjOtnfyAkHv7CVg8l0fSB6GXsyES-0-bbf61c6a54f23de1b5d517e31a3b9f49)
运行结果如图3-20所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P107_5461a.jpg?sign=1739672366-IbADZObURwbBXD83jcmx5fZhBOlFIzda-0-c513287ab934ab8e2835d237ef8cdc2e)
图3-19 semilogx函数示例一
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P107_5465a.jpg?sign=1739672366-k6o2tSwYukFrs9Q993QGbTomHkoEUYb0-0-e9000d559b5dac11cca21c88cecd95ce)
图3-20 semilogx函数示例二
2)semilogy函数
semilogy函数与semilogx函数正好相反,它是对y轴按对数比例绘数据图。
【例3-20】 semilogy函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P107_5473a.jpg?sign=1739672366-E1OslOr30gmjHhTo7Z9MhB2xk9jaVk0P-0-46a880424cd3648739e76cfc925eb01c)
运行结果如图3-21所示。
3)loglog函数
loglog函数用于对x轴和y轴都按对数比例绘数据图。
【例3-21】 loglog函数示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P107_5481a.jpg?sign=1739672366-zSSp3APsV2VuKtP5dNFqROJYtgwiP5u8-0-a4d02a8dd7de182bf8659ccee42f3961)
运行结果如图3-22所示。
4)polar函数
polar函数用于绘制极坐标系下的二维图形,调用格式为
polar(theta,rho,s):其中,theta为弧度表示的角度向量,rho是相应的幅向量,s为图形属性设置选项。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5495a.jpg?sign=1739672366-L1NPCEmREabQXILKHryzxN7g45cm4Lwl-0-42bdf6b42efc1fc0245ea2f2d0e76c37)
图3-21 semilogy函数示例
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5499a.jpg?sign=1739672366-CblVM67uNQiRxQRfn3PFNUynxUr4FGF4-0-bfcc5a6f259ac8e045424661d34b38a3)
图3-22 双对数刻度曲线
【例3-22】 polar函数的用法举例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5507a.jpg?sign=1739672366-Yxfp47lzBCJ83XVvuYp9YqyxRzW6KZo1-0-a57b2394c54586a6df9caab3d4b9a15f)
运行结果如图3-23所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5510a.jpg?sign=1739672366-LqAPaS7Bpk7uO9K5hvHPtpTfdjdUjcds-0-9ce640e79ff3fb027a98eea2bb7559ee)
图3-23 polar函数的用法举例
5)plotyy函数
在进行数值比较过程中经常会遇到双纵坐标(即双y轴坐标系)显示的要求,解决该问题,可调用plotyy函数。完整调用格式为
plotyy(x1,y1,x2,y2,fun1,fun2):该命令将以fun1方式绘制(x1,y1),以fun2方式绘制(x2,y2)。其中,若默认参数fun1和fun2时,则以plot方式绘制图形;默认参数fun2时,则以fun1方式绘制图形(fun1可以为plot、semilogx、semilogy等)。
【例3-23】 利用plotyy函数产生两个y轴,来指定同一数据的两种不同显示形式。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5518a.jpg?sign=1739672366-6SVGMW04kZ0Vn4uU0zqIFvtZqlGOm4G6-0-bad0ef9df726427540f36a42e51185d1)
运行结果如图3-24所示。
【例3-24】 利用plotyy函数在同一个图中绘制两组不同的数据。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P108_5526a.jpg?sign=1739672366-C8iQQ5N3S0japBDZgA8AaGeulH81kcEA-0-06244f1befb8f04f06061835dd91e31a)
运行结果如图3-25所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5539a.jpg?sign=1739672366-ME73KdO5Wab5XQzGqn1YzPZJv8qmJ9Dy-0-df464922f9ce3288e99861ea8e3e5c2b)
图3-24 同一数据的不同图形显示形式
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5543a.jpg?sign=1739672366-Wd0o72lPhX3XJxZEk55Ze0gUBGFV5j5L-0-8ecc0b2967f0e54212f0f387a2d8599a)
图3-25 用两种不同类型的y轴绘图比较
2.特殊二维图形函数
1)条形图、水平条形图
bar(x,y)表示在x指定的位置上绘y中每一元素的条形图。
【例3-25】 绘制垂直和水平直方图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5551a.jpg?sign=1739672366-QKWvjs1B2rwt1vuYNLUWmI72UgEySNRJ-0-a9bc65190489cf96b8c4b58d61e5f113)
运行结果如图3-26所示。
【例3-26】 绘制矩阵的直方图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5559a.jpg?sign=1739672366-6KugbGlVGPTq9gZnnnm6Pu5QzfYVVsRX-0-e19778f0f13d92c4c3ccdd27a6c660ad)
运行结果如图3-27所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5563a.jpg?sign=1739672366-xwDlsP9ENzwRjLPvOSqQaPudtV1rt40L-0-4f303e6a181927dc40820c078ac243fb)
图3-26 Y是向量时的直方图
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P109_5567a.jpg?sign=1739672366-0f4jM9Q32dzws7oOpsIThecAswZPOVvW-0-c2786883aaf19b3fc2cf923cf5225f97)
图3-27 钟形图
【例3-27】 创建4个次级图形,显示不同条形变量的效果。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P110_5583a.jpg?sign=1739672366-1a7JDpJ5rR2IVVwMqvMShqDklMoWgdLC-0-71a6f91923431ec95501cf0d131f7919)
运行结果如图3-28所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P110_5591a.jpg?sign=1739672366-CupRqStgI1rkpBbZZEepCRbvcQ3niRiJ-0-eed302386ca6e524b0771f92933d2466)
图3-28 bar函数示例效果
2)面积图
面积图将向量(或矩阵)y中的元素显示为一条或多条曲线,并填充每条曲线以下的面积。当y为矩阵时,曲线堆栈,显示每个x区间内每行元素对曲线总高度的贡献。绘制面积图通过调用area函数实现,调用格式为
area(x,y,ymin):绘制x的对应点处的y数据的图。如果x为一向量,则length(x)必须等于length(y),x必须是单调的。如果x为一矩阵,则size(x)必须等于size(y),且x的每一列必须是单调的。使用sort可以使向量或矩阵单调化。对于面积填充,ymin为指定方向上的下限,ymin默认为0。默认x时,绘y向量图或y矩阵每列的和,x自动根据length(y)(当y为向量时)或size(y,1)(当y为矩阵时)确定比例。
【例3-28】 用area函数根据矢量或矩阵的各列生产一个区域图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P110_5599a.jpg?sign=1739672366-zpgjjXEIlyypFA3GthNAlksQD4Vglr4v-0-4c09afcea5a8cba24c11f6717e8748fa)
运行结果如图3-29所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P111_5609a.jpg?sign=1739672366-mFaIe4PPVEUokJ5i5l8HpH6kY4uB7Rpv-0-428333d071fe529021d8532125c960aa)
图3-29 矩阵的区域图
3)饼图
饼图显示某向量或矩阵中各元素所占的比例。pie函数和pie3函数分别创建二维饼图和三维饼图,pie函数的调用格式为
pie(x,explode):explode为与x对应的零或非零矩阵,非零值对应的扇区将从饼图中分离,所以,若explode(i,j)非零,则x(i,j)对应扇区从中心分离(注意:explode必须与x有相同的大小)。参数explode默认时,使用x中的数据绘制饼图,x中的每一个元素用饼图中的一个扇区表示。
【例3-29】 利用pie(X)函数绘制一张饼图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P111_5617a.jpg?sign=1739672366-ETb1vRJwCzRxMmfjedo1aNdVwUa9GfaT-0-ebe6594b5da9489390f7509c1e140e72)
运行结果如图3-30所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P111_5620a.jpg?sign=1739672366-RRsaH8XlULEuE7Km6m6EDpVYynAbTzjA-0-5559f095c74cacd78805d917952c9c59)
图3-30 饼图
4)误差条图
误差条图显示数据的置信区间或沿曲线的偏差,误差条图通过调用errorbar函数来绘制,调用格式有以下几种:
errorbar(Y,E):对Y绘图并在Y的每个元素处绘一误差条,误差条两端距离曲线上下均为E(i)长度。
errorbar(X,Y,E):绘X和Y的误差条图,误差条长度为2*E(i),其中X、Y和E必须大小相同。当它们为向量时,每个误差条均由(X(i),Y(i))定义,曲线上的点上下各E(i)误差条。当它们为矩阵时,每个误差条则由(X(i,j),Y(i,j))定义。
errorbar(X,Y,L,U):用由L(i)+U(i)指定了的误差条上下长度来绘制误差条图,其中,X、Y、L和U必须大小相同。当它们为向量时,每个误差条由(X(i),Y(i))定义,用L(i)定义下面的距离,用U(i)定义上面的距离。当它们为矩阵时,每个误差条由(X(i,j),Y(i,j))定义,用L(i,j)定义下面的距离,用U(i,j)定义上面的距离。
【例3-30】 利用errorbar函数来表示已知资料的误差值。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P112_5637a.jpg?sign=1739672366-CeEweZ2QPm95Ehlyv3cNKq5cGihA1MOw-0-8c8a3f079f574b71d1bbc0a06500f757)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P112_5645a.jpg?sign=1739672366-jZVxx3gxScZy6pK0JL8RIB2Lv8x23cjF-0-0d40f3f528f2bdf7aaf4437078bf95e8)
运行结果如图3-31所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P112_5649a.jpg?sign=1739672366-bmnLW1KxmCXR1dZs4e0GRNlryxWHjpBn-0-4ef996a4a242b404ccdea75a4c48fec2)
图3-31 误差的区域范围
5)直方图
在统计中,为了掌握数据的分布特征,需要绘制直方图,绘制直方图可通过调用函数hist函数来实现,调用格式有以下几种:
n=hist(Y):将Y中的元素分到10个间隔相同的条形中,并返回每个条形中元素的个数。若Y是矩阵,则hist函数对每一列生成直方图。
n=hist(Y,x):其中x为向量,返回Y的分布。如,若x为一5元素的向量,则hist函数将Y中的元素分配到五组条形中。
n=hist(Y,nbins):其中,nbins为标量,使用nbins组条形。
直方图的x轴反映Y中值的范围,直方图的y轴显示落到组中的元素个数。所以,在任意条形组中,y轴包含0到最大元素个数的范围。
直方图用添加阴影的图形对象创建,若希望改变图形的颜色,可以设置阴影属性。
【例3-31】 创建服从高斯分布的数据的钟形直方图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P113_5663a.jpg?sign=1739672366-LNZc7JfFMHzEv9fu0pICXx3FMiTMmiNr-0-7f3dc6a8e816cf247ce1ad95a554aade)
运行结果如图3-32所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P113_5669a.jpg?sign=1739672366-zPiX0rZoRqzQRHGqIMzTesxBGDxXkY6Q-0-266308c7640f1a3a886898efca27077f)
图3-32 创建服从高斯分布的数据的钟形直方图
6)等高线图
contour函数用于绘制等高线图,其调用格式如下:
contour(Z,N/V)
contour(X,Y,Z,N/V)
其中,输入变量Z必须为一数值矩阵,是该函数必须输入的变量,可以将它理解为x-y平面的高度。变量N/V为可选输入变量,参数N为所绘图形等高线的条数,即按指定数目绘制等高线;也可以选择输入参数V(这里,V为一数值向量),等高线的条数将为向量V的长度,并且等高线的值为对应向量的元素值。如果没有选择,系统将自动为矩阵Z绘制等高线图,其等高线条数为预设值。如果按后一种方式调用,X和Y指定x轴和y轴的范围。当X和Y为矩阵时,它们必须与Z具有相同的大小。
【例3-32】 在范围-2<x<2,-2<x<3内绘制函数的等高线图。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P113_5691a.jpg?sign=1739672366-sVuPRmFHCWfFR1ZizORX3QIGL9g2FXto-0-a45dbe934de3dcf38ddf90a77d9fe92a)
运行结果如图3-33所示。
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P114_5715a.jpg?sign=1739672366-xqEfgMdGtOKNYHGzkkJ5AkSeKQe3HspP-0-de73a7b79bb9a92e087cb7e68c119085)
图3-33 等高线图