5.2.2 MATLAB学习笔记之绘图-其他形式的二维图形2

其他特殊二维图形

除二维曲线以外,MATLAB还可以绘制其他特殊二维图形,包括用于统计分析的条形图、直方图、饼图、散点图等。

一、条形类图形

条形类图形用一系列高度不等的条纹表示数据大小,常用的有条形图和直方图。条形图用于显示不同时间点的数据大小或比较各组数据之间的大小,直方图用于表示数据分布的情况。

1.条形图

绘制二维条形图的函数为 bar (垂直条形图)与barh (水平条形图),它们的调用格式是一样的。以 bar 函数为例,常用的调用格式如下:

bar(y): 若 y 为向量,则分别显示每个分量的高度,横坐标为y 的下标。若y为矩阵, 则分别比较y 的每一行元素的大小,横坐标为矩阵的行数

bar(x,y,style): 在指定的横坐标x上画出y 。当 y 是 m×n 矩阵时,矩阵中每一行元素绘制在一组中,每一列元素绘制在每组中相对应的x 位置上。style 指定条形的排列模式,类型有 grouped(簇状分组)和 stacked (堆积分组),默认采用grouped 排列模式。

例1 条形图应用示例。

程序如下:

x=-1:1;
y=[1,2,3,4,5;1,2,1,2,1;5,4,3,2,1];
subplot(2,2,1);bar(x,y,'grouped')
title('Group');axis([-3,3,0,6])
subplot(2,2,2);barh(x,y,'stacked')
title('Stack')

untitled

2.直方图

在MATLAB 中,绘制直方图的函数有两个:hist 函数和rose 函数,分别用于绘制直角坐标系下的直方图和极坐标系下的直方图,后者也称为玫瑰花图。

hist 函数的应用更为广泛一些,其调用格式如下:

hist(y[,x])

  • 如果y为向量,则将y中的最小值和最大值之间的数值区间等分,并统计每个区间中向量元素的个数,然后以元素个数为高度绘制条形图。
  • 如果y为矩阵,hist 函数将y的每一列作为一个向量,绘制每一列元素的直方图
  • 选项x 用于设置统计区间的划分方式,若x是标量,则统计区间均分成x个小区间;若x是向量,则区间数为向量的长度,向量中的每一个数指定各区间的中心点,省略x 时,按10个等分区间统计。

例2 绘制服从高斯分布的直方图,再将这些数据分到指定范围的区间中,并绘制在直方图中。

程序如下:

y=randn(500,1);
subplot(2,2,1)
hist(y);title('高斯分布直方图')
x=-4:0.1:4;
subplot(2,2,2)
hist(y,x);title('指定范围的高斯分布直方图')

untitled

rose 函数的调用格式与hist 函数非常相似,调用方法如下:

rose(theta[,x])

  • 其中,向量 theta 用于确定每一区间与原点的角度(角度以弧度为单位),每一区间长度反映出 落入该区间的theta 元素的个数。
  • 若x 是标量,则在[0,2π]区间内画出x 个等距的小扇形,默认值为20。若x 是向量,则x 指定分组中心值,x 中元素的个数为数据分组数。

例3 绘制例2中高斯分布数据在极坐标下的直方图。

y=randn(500,1);
theta=y*pi;
rose(theta)
title('在极坐标下的直方图')

untitled

二、面积类图形
1.扇形统计图

扇形统计图又称为饼图,反映一个数据系列中各个分量在总数量中所占 的比重。MATLAB 提供了pie 函数来绘制扇形统计图,其调用格式如下:

pie(x,explode)

  • pie函数使用x中的数据绘制饼图,x 可以是向量或矩阵。
  • 如果x 为向量,则x 的每个元素占有一个扇形,从饼图的正上方开始,按逆时针顺序分别为x 的各个元素。
  • 如果x为矩阵,则按照列的顺序依次排列矩阵元素。如果x的全部元素之和小于1,则绘制的图形不是完整的圆。
  • explode是 与x 同等大小的向量或矩阵,与 explode的非零值对应的部分将从饼图中心分离出来。 省略explode时,饼图是一个整体。

例4 某次考试优秀、良好、中等、及格、不及格的人数分别为7、17、23、19、5,试用扇形统计图作成绩统计分析。

程序如下:

pie([7,17,23,19,5],[0,0,0,0,1])   %对应第5分量部分从饼图中心分离
title('饼图')
legend('优秀','良好','中等','及格','不及格')

untitled

2.面积统计图

面积统计图反映数量变化的趋势,在实际中可以表现不同部分对整体的影响。在MATLAB 中,绘制面积统计图的函数是 area, 其调用格式如下。

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

area(x,y): 如 果x 、y 均为向量,与plot(x,y) 一样,但将所得曲线下方的区域填充颜色。 如果x 为向量,y 为矩阵,则矩阵y 的第一列对向量x 绘图,然后依次是下一列与前面所有列值的和对向量x 绘图,每个区域有各自的颜色。

例如

x=1:2:9;
y=[1,3,5,2,6;2,4,5,6,2;5,4,7,2,2]'; 
area(x,y);
grid on;
title( '面积统计图')

untitled

3.实心图

实心图是将数据的起点和终点连成多边形,并填充颜色。绘制实心图的函数是fill, 其调用格式如下:

fill(x,y,颜色)

fill函数按向量元素下标渐增次序依次用直线段连接x 、y 对应元素定义的数据点。

假若这样连接所得折线不封闭,那么 MATLAB 将自动把该折线的首尾连接起来,构成封闭多边形, 然后将多边形内部涂满指定的颜色。

例5 绘制一个红色的正八边形。

程序如下:

t=0:2*pi/8:2*pi; %取正八边形坐标点
t=[t,t(1)];      %数据向量的首尾重合,使图形封闭。
x=sin(t);
y=cos(t);
fill(x,y,'r')    %x、y是圆周坐标,数据间隔足够小时可以画圆
axis equal;axis([-1.5,1.5,-1.5,1.5])

untitled

三、散点类图形

散点类图形经常用于实验中,比较实验得到的结果与理论值之间的差异,并根据实验误差 的特征曲线研究误差的规律,得出实验中研究的对象主体与对象主体相关事物之间的关系。

MATLAB 提供了绘制散点类图形的函数scatter 、stairs 和 stem, 分别用于绘制散点图、阶梯图和杆图。3个函数的调用格式如下:

scatter(x,y[,'filled'][, 颜色])
stairs(x,y, 选项)
stem(x,y,  选项)

3个函数的用法与plot函数相似。 一般情况下,x、y为同等大小的向量,用于定位数据点。 scatter函数的filled 选项表示填充绘图点,省略时,数据点是空心的。

例6 分别以散点图、阶梯图和杆图形式绘制曲线
y = 2 e − 0.5 x y=2e^{-0.5x} y=2e0.5x
程序如下:

x=0:0.35:7;
y=2*exp(-0.5*x);
subplot(2,3,1);scatter(x,y,'g')
title('scatter(x,y,''g'')');axis([0,7,0,2])
subplot(2,3,2);stairs(x,y,'b')
title('stairs(x,y,''b'')');axis([0,7,0,2])
subplot(2,3,3);stem(x,y,'k')
title('stem(x,y,''k'')');axis([0,7,0,2])

untitled

四、矢量类图形

矢量由两个参数指定,分别代表矢量的x 分量和y 分量,也可以由一个复数指定,复数的实部和虚部分别代表矢量的x分量和y 分量。

矢量类图形有罗盘图、羽毛图和箭头图,MATLAB 提供了绘制这些图形的函数。

1.罗盘图

罗盘图表示起点为坐标原点的向量,同时还在坐标系中显示圆形的分隔线。 绘制这种图形的函数是compass, 其调用格式如下。

compass(x,y):x 、y 为 n 个元素的向量,函数显示n 个箭头,箭头的起点为原点,箭头的位置为(x(i),y(i))

compass(z): z 为 n 个元素的复数向量,函数显示n 个箭头,箭头的起点为原点,箭头的位置为*(real(z),imag(z) )*。real(z) 和 imag(z) 分别代表复数向量的实部和虚部。

2.羽毛图

羽毛图是在横坐标上等距地显示向量的图形,看起来就像鸟的羽毛一样。绘制羽毛图的函数是 feather,其调用格式如下。

feather(x,y): 绘制由x 与 y 确定的向量。

feather(z): 绘制由z 确定的向量,等价于feather(real(z),imag(z)。

3.箭头图

上面两个函数绘制的图形也可以叫箭头图,但这里的箭头图能更好地表示矢量,它的箭头方向代表矢量方向,箭头长短表示矢量的大小。绘制这种图形的函数是 quiver,其调用格式如下:

quiver([x,y,]u,v)

其中,(x,y) 为矢量起点,(u,v) 为待绘制的矢量。x 、y 、u 、v 必须是同型矩阵,若省略x 、y, 则在平面上均匀取若干个点作为起点。

例7 分别以罗盘图、羽毛图和箭头图形式绘制正弦曲线。

程序如下:

x=-pi:pi/8:pi;
y=sin(x);
subplot(2,2,1);compass(x,y)
title('罗盘图')
subplot(2,2,2);feather(x,y)
title('羽毛图')
subplot(2,1,2);quiver(x,y)
title('箭头图')

untitled

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值