第五章 图形绘制(二)
特殊图形的绘制
1. 柱状图
matlab中主要有四个函数用于绘制条形图
bar() %绘制纵向的二维柱状图
barh() %绘制横向的二维柱状图
bar3() %绘制三维纵向条形图
bar3h()
语法格式
- bar(y)
- bar(x,y)
- bar(…,width)
- bar(…,‘style’)
‘style’的取值为’grouped’ or ‘stacked’
- grouped: 绘制的图形共有 m组,m为矩阵y的行数,每一组有n个条形,n为矩阵的列数,y的每一个元素对应一个条形。
- stacked: 绘制的图形共有m个条形,每个条形为第m行的n个元素的和,每个条形由n种颜色构成,每种颜色对应一种元素。 - bar(…,‘bar_color’)
e.g:
close all
clear
y1 = 100*rand(5,3)
subplot(211)
bar(y1,'grouped');
subplot(212)
bar(y1,'stacked','p',1)
consequense:
2.饼状图
饼状图是一种统计图形,通常用于显示每个元素占总体的百分比。在统计学中应用很频繁
语法格式
- pie(x)
- 绘制x的饼状图,每一个元素占一个扇形。
- 上方 正中开始,逆时针为序
- 元素的和 超过1:按照百分比绘制
- 元素的和 不足1:不完整的饼
- pie(x,explode)
- 设置相应的扇形偏移
- 用于突出显示
- explode为[ 0 1 0 0 1…]与x对应,1对应的扇形会从图形中偏离
- pie( x, …, labels)
- 标注图形
- labels为元素为字符串的单元数组,元素个数与 x一致
pie3( )和 pie用法一致
我们来画几个饼~
e.g
close all
clear
x=[2,4,8,3];explode = [0 1 0 0 ];
subplot(211)
pie(x,explode)
subplot(212)
labels={'教授','副教授','讲师','助教'};
pie3(x,explode,labels)
colormap autumn
consequence
colormap是颜色色系,不仅可以在饼状图中应用,也可以 在后文的三维图形中应用
可以直接在Matlab中搜索
拖到比较下面就可以看到了:有很多选择~
3.三维图形的绘制
常用的函数有:
- 三位线图 plot3()
- 三维网线图 mesh()
- 三维曲面图 surf()
1,绘制三维曲线plot3()
用法基本和plot()一样,我们着重学习后文的mesh和surf,这里我们就 看一个例子就好。
close all
t = 0:pi/50 : 20*pi;
subplot(211)
plot3(sin(t), cos(2*t), sin(t) + cos(t),'-r' )
subplot(212)
plot3(sin(2*t),cos(t),2*cos(3*t) , ':b')
consequence
2,mesh()
mesh()可以绘制出某一区间的完整的网格曲面
- mesh(z)可以 给出矩阵z元素的三位消隐图
- 网格表面由z定义
- 用来显示其他方式难以输出的包含大量数据的大型矩阵
语法格式
mesh(X,Y,Z);
- 绘制出一个曲面的网格图
- 图像的颜色取决于Z(与高度成正比)
- 如果:
-X,Y都是向量
-length(X) = n,length(Y) = m,size(Z) = [m,n]
则:X(j), Y(i), Z(i,j)是绘制的图形中的各个结
mesh(Z) , surf(Z);
- 使用X = 1:n和Y = 1:m,[m,n] = size(Z),高为z
- 它是一个单值函数,图像的颜色与高度Z成正比
- Z的元素为z坐标,元素对应的矩阵行和列分别为x坐标和y坐标
% 建立行向量x,列向量y:
x = -8 : 0.5 :8;
y = x' ;
% 第1条语句x的赋值为定义域,在其上估计函数、建立行向量x;
% 第2条语句建立列向量y。
% 生成X矩阵:按向量y的长度建立1_矩阵
X = ones( size(y) ) * x;
%生成Y矩阵:建立一个33 × 33重复列的Y矩阵,每列均为向量y
Y = y * ones( size(y) ) ' ; %产生Y的响应
%生成三维网格曲面图:
R = sqrt( X.^2 + Y.^2 ) + eps ; %计算各网格点的半径
Z = sin(R) ./ R; %计算函数值矩阵Z。
mesh( Z )
该程序运行后得到三维网格曲面图。
3,surf()
surf()函数也是MATLAB中常用的三维绘图函数
其一般调用格式如下:
surf(x,y,z);
- 该函数输入参数的设置与mesh()相同 ;
- 不同的是mesh()函数绘制的是一网格图 ;
- 而surf()函数绘制的是着色的三维表面。
4,meshgrid( )
为3D绘图生成X、Y矩阵。meshgrid()仅限于二维或三维Cartesian空间,meshgrid()更适合在二维或三维Cartesian空间解决问题
meshgrid()函数的语法如下:
[X,Y] = meshgrid(x,y);
- 把向量x和y指定的域转换成矩阵X、Y
- 用来实现两个变量和三维mesh()、surface()绘图的功能
- 输出矩阵X的行复制于向量x
- 输出矩阵Y的列复制于向量y。
[X,Y] = meshgrid(x)
- 等同于 [X,Y] = meshgrid(x,x)。
[X,Y,Z] = meshgrid(x,y,z)
- 三维矩阵用来实现三个变量和三维立体绘图的功能。
EXAMPLE:
% 上例中的前4行用meshgrid()函数代替。
[X, Y]=meshgrid(-8:0.5:8)
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(Z)
RESULT
4,meshc( )
meshc()&mesh()的调用方式相同,只是该函数在mesh的基础上增加了绘制等高线的功能
EXAMPLE
[x,y] = meshgrid ( [-4: 0.5 :4] );
z = sqrt(x.^2 + y.^2);
% sqrt():求算数平方根
figure
meshc(z)
RESULT
5,meshz()
meshz()&mesh()的调用方式也相同,
该函数增加了z轴铅垂线
EXAMPLE
[x,y] = meshgrid( [ -4 : 0.5 : 4] );
z = sqrt(x.^2 + y.^2 );
figure
meshz(z)
6,彗星图
彗星图: 状如彗星的动画图。
其中:彗星头跟踪数据点的变化
彗星尾是彗星头后动态画出的拖曳(跟踪整个函数的实线)
调用:
comet(y);
- 显示向量y的彗星图
comet(x,y);
- 显示向量y相当于x的彗星图
comet(x,y,p);
- 指定彗星拖尾长度为:p*length(y)
- p默认值为1
comet3(z), comet3(x,y,z),comet(x,y,z,p)
- 绘制3D彗星图
EXAMPLES:
t = 0: 0.01 :2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(y)
figure
comet(x,y)
comet(x,y,t)
RESULTS
comet(y):
comet(x,y)
comet3(x,y,t)