MATLAB中特殊图形的绘制 您所在的位置:网站首页 matlab中阶梯图 MATLAB中特殊图形的绘制

MATLAB中特殊图形的绘制

2023-09-26 23:45| 来源: 网络整理| 查看: 265

为了满足用户的各种需求,MATLAB还提供了绘制条形图、面积图、饼图、阶梯图、火柴图等特殊图形的命令。

1.条形图

绘制条形图时可分为二维情况和三维情况,其中绘制二维条形图的命令为bar(竖直条形图)与barh(水平条形图);绘制三维条形图的命令为bar3(竖直条形图)与bar3h(水平条形图)。它们的使用格式都是一样的,因此我们只介绍bar的使用格式。

调用格式                                             说明

bar(y)                                          若y为向量,则分别显示每个分量的高度,横坐标为1到length(y);若y为矩阵,则bar把y分解成行向量,再分别画出,

                                                    横坐标为1到size(y,1),即矩阵的行数

bar(x,y)                                        在指定的横坐标x上画出y,其中x为严格单增的向量。若y为矩阵,则bar把矩阵分解成几个行向量,在指定的横坐标

                                                    处分别画出

bar(...,width)                              设置条形的相对宽度和控制在一组内条形的间距,默认值为0.8,所以,如果用户没有指定x,则同一组内的条形有很

                                                    小的间距,

                                                    若设置width为1,则同一组内的条形相互接触

bar(...,'style')                              指定条形的排列类型,类型的group和stack,其中group为默认的显示模式,它们的含义为:

                                                    group:若y为n*m矩阵,则bar显示n组,每组有m个垂直条形图

                                                    stack:对矩阵y的每一个行向量显示在一个条形中,条形的高度为该行向量中的分量和,其中同一条形中的每个分量

                                                    用不同的颜色显示出来,从而可以显示每个分量在向量中的分布

bar(....,LineSpec)                     用指定的颜色LineSpec显示所有的条形

[xb,yb] = bar(...)                         返回用户可用命令plot或命令patch画出条形图的参量xb、yb

h = bar(...)                                  返回一个patch图形对象句柄的向量,每一条形对应一个句柄

例:对于矩阵

绘制4种不同的条形图。

>> Y = [1 2 3; 7 4 2; 2 3 4; 6 5 8; 7 9 4; 2 6 8]; >> subplot(2,2,1) >> bar(Y) >> title('图1') >> subplot(2,2,2) >> bar3(Y),title('图2') >> subplot(2,2,3) >> bar(Y,2.5) >> title('图3') >> subplot(2,2,4) >> bar(Y,'stack'),title('图4') >>

2.面积图

面积图在实际中可以表现不同部分对整体的影响,在MATLAB中,绘制面积图的命令是area,它的使用格式如下:

调用格式                                                   说明

area(x)                                                与plot(x)命令一样,但是将所得曲线下方的区域填充颜色

area(x,y)                                             其中y为向量,与plot(x,y)一样,但将所得曲线下方的区域填充颜色

area(x,A)                                            矩阵A的第一行对向量x绘图,然后依次是下一行与前面所有行值的和对向量x绘图,每个区域有各自的颜色

area(...,level)                                     将填色部分改为由连线图到y = level的水平线之间的部分

例:利用矩阵

绘制面积图。

>> close all >> Y = [1 5 3; 3 2 7; 2 4 8; 2 6 1]; >> area(Y) >> grid on >> colormap summer >> set(gca, 'layer', 'top') >> title('面积图')

 注意这里的set(gca, 'layer', 'top')命令

h = gca returns the handle to the current axes for the current figure. If an axes does not exist, thengca creates an axes and returns its handle. You can use the axes handle to query and modify axes properties. 

set         Set Handle Graphics object properties Syntax

set(H,'PropertyName',PropertyValue,...) set(H,a) set(H,pn,pv,...) set(H,pn,MxN_pv) a = set(h) pv = set(h,'PropertyName')

所以这里的set(gca, 'layer', 'top')就是把坐标轴显示到顶层,如果不加这句,最终显示的图像会是如下所示:

3.饼图

饼图用来显示向量或矩阵中各元素所占的比例,它可以用在一些统计数据可视化中。在二维情况下,创建饼图的命令是pie,三维情况下创建饼图的命令是pie3。二者的使用格式也非常相似,因此我们只介绍pie的使用格式

调用格式                                             说明

pie(X)                                           用X中的数据画一饼形图,X中的每一元素代表饼形图中的一部分,X中元素X(i)所代表的扇形大小通过X(i)/sum(X)

                                                      的大小来决定。 若sum(X) = 1,则sum(X) = 1,则X中元素就直接指定了所在部分的大小;若sum(X) < 1,则画出一不

                                                     完整的饼形图

pie(X, explode)                          从饼形图中分离出一部分。explode为一与X同维的矩阵。当所有元素为零时,饼图的各个部分将连在一起组成一个

                                                     圆,而其中存在非零元时,X中相对应的元素在饼图中对应的扇形将向外移出一些来加以突出

h = pie(...)                                    返回一patch与text的图形对象句柄向量h

例:某企业四个季度的盈利额分别为528万元、701万元、658万元和780万元,试用饼图给出各个季度所占盈利总额的比例。

>> X = [528 701 658 780]; >> subplot(1,2,1) >> pie(X) >> title('二维饼图') >> subplot(1,2,2) >> explode = [0 0 0 1]; >> pie3(X, explode) >> title('三维分离饼图') >> 运行结果如下:

4.柱状图

柱状图是数据分析中用得较多的一种图形,例如在一些预测彩票结果的网站,把各期中奖数字记录下来,然后做成柱状图,可以让彩民清楚地了解到各个数字在中奖号码中出现 的几率。在MATLAB中,绘制柱状图的命令有两个,一个hist命令,用来绘制直角坐标下的柱状图;另一个是rose命令,用业绘制极坐标系下的柱状图。

hist的命令的使用格式如下:

调用格式                                                     说明 

n = hist(Y)                                              把向量Y中的数据分放到等距的10个柱状图中,且返回每一个柱状图中的元素个数,若Y为矩阵,则该命令

                                                                按列对Y进行处理

n = hist(Y,x)                                           参量x为向量,把Y中元素放到m(m = length(x))个由x中元素指定的位置为中心的柱状图中

n = hist(Y,n)                                          参量n为标量,用于指定柱状图的数目

[n,xout]  = hist(...)                                 返回向量n与包含频率计数与柱状图的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图

hist(...)                                                   直接绘出柱状图

例:创建服从高斯分布的数据柱状图,再将这些数据分到范围指定的若干个相同的柱状图中。

>> Y = randn(10000,1); >> subplot(1,2,1) >> hist(Y) >> title('高斯分布柱状图') >> x = -4:0.1:4; >> subplot(1,2,2) >> hist(Y,x) >> h = findobj(gca, 'Type', 'patch'); >> set(h,'FaceColor','r') >> title('指定范围的高斯分布柱状图')

注意这里的findobj命令 findobj         Locate graphics objects with specific properties

Syntax

findobj h = findobj h = findobj('PropertyName',PropertyValue,...) h = findobj('PropertyName',PropertyValue,'-logicaloperator', PropertyName',PropertyValue,...) h = findobj('-regexp','PropertyName','regexp',...) h = findobj('-property','PropertyName') h = findobj(objhandles,...) h = findobj(objhandles,'-depth',d,...) h = findobj(objhandles,'flat','PropertyName',PropertyValue,...)

Find all line objects in the current axes:

h = findobj(gca, 'Type', 'line')

运行结果如下:

rose命令的使用格式与hist命令非常相似,具体如下:

调用格式                                                           说明 

rose(theta)                                             显示参数theta的数据在20个区间或更少的区间内的分布。向量theta中的角度单位为弧度,用于确定每一

                                                                 区间与原点的角度,每一区间长度反映出输入参量的元素落入该区间的个数

rose(theta,x)                                           用参量x指定每一区间内的元素与区间的位置,length(x)等于每一区间内元素的个数与每一区间位置角度

                                                                 的中间角度

rose(theta,n)                                          在区间[0,2π]内画出n个等距的小扇形,默认值为20

[tout,rout] = rose(...)                               返回向量tout与rout,可以用polar(tout,rout)画出图形,但此命令不画任何的图形

例:画出上例中的高斯分布数据的极坐标下的柱状图

>> theta = Y * pi; >> rose(theta) >> title('极坐标系下的柱状图') >>

除了上面提到的在统计中经常用到的图形我,MATLAB还提供了一些在工程计算中常用的离散数据图形,例如误差数据图、火柴杆图与阶梯图等,下面来看一下它们的用法。

5.误差棒图

MATLAB中绘制误差棒图的命令为errorbar,它的使用格式如下:

调用格式                                                     说明

errorbar(Y,E)                                      画出向量Y,同时显示在向量Y的每一元素之上的误差棒,其中误差棒为E(i)在曲线y上面与下面的距离线段,

                                                             故误差棒的长度为2E(i)

errorbar(X,Y,E)                                   X、Y、E必须为同型参量。若同为向量,则画出曲线上点(X(i),Y(i))处长度为2E(i)的误差棒图;若同为矩阵,

                                                             则画出曲面上点(X(i,j),Y(i,j))处带长度为E(i,j)的误差棒图

errorbar(X,Y,L,U)                               X、Y、L、U必须为同型参量。若同为向量,则在点(X(i),Y(i))处画出向下长为L(i)、向上长为U(i)的误差棒图;

                                                             若同为矩阵,则在点(X(i,j),Y(i,j)),处画出向下长为L(i,j)、向上长为U(i,j)的误差棒图

errorbar(...,LineSpec)                       画出用LineSpec指定线型、标记符、颜色等的误差棒图

h = errorbar(...)                                   返回线图形对象的句柄向量h

绘出下表数据的误差棒图

观察值                 213 225          232     221            254            243           236           287          254          257

实际值                 210            220           234            235            250            241           240           285          250          260

>> close all >> x = [213 225 232 221 254 243 236 287 254 257]; >> y = [210 220 234 235 250 241 240 285 250 260]; >> e = abs(x - y); >> errorbar(y, e) >> title('误差棒图') >>

6.火柴杆图

用线条显示数据点与x轴的距离,用一小圆圈(默认标记)或用指定的其他标记符号与线条相连,并在y轴上标记数据点的值,这样的图形称为火柴杆图。在二维情况下,实现这种操作的命令是stem,它的使用格式如下:

调用格式                                                                         说明

stem(Y)                                                            按Y元素的顺序画出火柴杆图,在x轴上,火柴杆之间的距离相等;若Y为矩阵,则把Y分成几个行向量,

                                                                          在同一横坐标的位置上

                                                                          画出一个行向量的火柴杆图

stem(X,Y)                                                        在横坐标x上画出列向量y的火柴杆图,其中X与Y为同型的向量或矩阵

stem(...,'fill')                                                    指定是否对火柴杆末端的“火柴头”填充颜色

stem(...,LineSpec)                                        用参数LineSpec指定线型线型、标记符号和火柴头的颜色画火柴杆图

h = stem(...)                                                    返回火柴杆图的line图形对象的句柄向量h

在三维情况下,也有相应的画火柴杆图的命令stem3,它的使用格式如下:

调用格式                                                                             说明

stem3(Z)                                                              用火柴杆图显示Z中数据与x-y平面的高度,若Z为一行向量,则x与y将自动生成,stem3将在与x轴平等

                                                                               的方向上等距的位置上画出Z的元素;若Z为列向量,stem3将在与y轴平等的方向上等距的位置上画出

                                                                               Z的元素

stem3(X,Y,Z)                                                       在参数X与Y指定的位置上画出Z的元素,其中X、Y、Z必须为同型的向量或矩阵

stem3(...,'fill')                                                       指定是否要填充火柴杆图末端的火柴头颜色

stem3(...,LineSpec)                                           用指定的线型、标记符号和火柴头的颜色

h = stem3(...)                                                       返回火柴杆图的line图形对象的句柄向量h

例:绘制下面函数的火柴杆图

>> close all >> t = -2*pi : pi/20 : 2*pi; >> x = exp(cos(t)); >> y = exp(sin(t)); >> z = exp(-t); >> stem3(x,y,z,'fill','r') >> title('三维火柴杆图') >>

7.阶梯图

阶梯图在电子信息工程以及控制理论中用得非常多,在MATLAB中,实现这种作图的命令是stairs,它的使用格式如下:

调用格式                                                                   说明

stairts(Y)                                                           用参量Y的元素画一阶梯图。若Y为向量,则横坐标x的范围从1到m = length(Y);若Y为m*n矩阵,则对Y的

                                                                           每一行画一阶梯图,其中x的范围从1到n

stairs(X,Y)                                                        结合X与Y画阶梯图,其中要求X与Y为同型的向量或矩阵。此外,X可以为行向量或者列向量,且Y为有

                                                                           length(X)行的矩阵

staris(...,LineSpec)                                        用参数LineSpec指定的线型、标记符号和颜色画阶梯图

[xb,yb] = stairs(Y)                                            该命令没有画图,而是返回可以用命令plot画出参量Y的阶梯图上的坐标向量xb与yb

[xb,yb] = stairs(X,Y)                                        该命令没有画图,而是返回可以用命令plot画出参量X、Y的阶梯图上的坐标向量xb与yb

例:画出正弦波的阶梯图

>> close all >> x = -pi:pi/10:pi; >> y = sin(x); >> stairs(x,y) >> hold on %如果没有此条指令,则plot画的图形会覆盖stairs画的图形 >> plot(x,y,'--*') >> hold off >> text(-3.8,0.8,'正弦波的阶梯图','FontSize',16)

由于物理等学科的需要,在实际中有时需要绘制一些带方向的图形,即向量图。对于这种图形的绘制,MATLAB中也有相关的命令。

8.罗盘图

罗盘图即为起点为坐标原点的二维或三维向量,同时还在坐标系中显示圆形的分隔线。实现这种作图的命令是compass,它的使用格式如下:

调用格式                                                                       说明

compass(X,Y)                                                     参量X与Y为n维向量,命令显示n个箭头,箭头的起点为原点,箭头的位置为[X(i),Y(i)]

compass(Z)                                                         参量Z为n维复数向量,命令显示n个箭头,箭头起点为原点,箭头的位置为[real(Z),imag(Z)]

compass(...,LineSpec)                                      用参量LineSpec指定箭头图的线型、标记符号、颜色等属性

h = compass(...)                                                  返回line对象的句柄给h

9.羽毛图

羽毛图是在横坐标上等距地显示向量的图形,看起来就像鸟的羽毛一样。它的绘制命令是feather,该命令的使用格式如下:

调用格式                                                                         说明

feather(U,V)                                                           显示由参量向量U与V确定的向量,其中U包含作为相对坐标系中的x成分,V包含作为相对坐标系

                                                                                 中的y成分

feather(Z)                                                               显示得数参量向量Z确定的向量,等价于feather(real(Z),imag(Z))

feather(...,LineSpec)                                            用参量LineSpec所指定的线型、标记符号、颜色等属性画出羽毛图

例:绘制正弦函数的罗盘图与羽毛图

>> close all >> x = -pi:pi/10:pi; >> y = sin(x); >> subplot(1,2,1) >> compass(x,y) >> title('罗盘图') >> subplot(1,2,2) >> feather(x,y) >> title('羽毛图') >>

10.箭头图

上面两个命令绘制的图形也可以叫箭头图,但即将要讲的箭头图比上面两个箭头更像数学中的向量,即它的箭头方向为向量方向,箭头的长短表示向量的大小。这种图的绘制命令是quiver与quiver3。前者绘制的是二维图形,后者绘制的是三维图形。它们的使用格式也十分相似,只是后者比前者多一个坐标参数,这里我们只介绍quiver的使用格式。

调用格式                                                                    说明

quiver(U,V)                                               其中U、V为m*n矩阵,绘出在范围为x = 1:n和y = 1:m的坐标系中由U和V定义的向量

quiver(X,Y,U,V)                                        若X为n维向量,Y为m维向量,U、V为m*n矩阵,则画出由X、Y确定的每一个点处由U和V定义的向量

quiver(...,scale)                                       自动对向量的长度进行处理,使之不会重叠,可以对scale进行取值,若scale=2,则向量长度伸长2倍,

                                                                   若scale = 0, 则如实画向量图

quiver(...,LineSpec)                                用LineSpec指定的线型、符号、颜色等画向量图

quiver(...,LineSpec,'filled')                     对用LineSpec指定的记号进行填充

h = quiver(...)                                            返回每个向量图的句柄

例:绘制马鞍面:上的法线方向向量。

>> close all >> x = -4:0.25:4; >> y = x; >> [X,Y] = meshgrid(x,y); >> Z = -X.^4 + Y.^4 - X.^2 - Y.^2 + 2*X*Y; >> surf(X,Y,Z) >> hold on >> [U,V,W] = surfnorm(X,Y,Z); >> quiver3(X,Y,Z,U,V,W,0.05) >> title('马鞍面的法向量图')

                                                                            



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有