x=0:pi/10:2*pi; y=sin(x);
plot(x,y,x,y*2,x,y*3)
y?sintsin(9t)及其包络线。 【例3.1】绘制曲线
程序如下: t=(0:pi/100:pi)'; y1=sin(t)*[1,-1]; plot(t,[y1,y2]') grid on; box on;
(2).具有两个纵坐标标度的图形
绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。这种图形有利于图形数据的对比分析。
plotyy(x1,y1,x2,y2)
其中,x1和y1对应一条曲线,x2和y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1、y1数据对,右纵坐标用于x2、y2数据对。
axis equal
%加网格线 %加坐标边框 %坐标轴采用等刻度
%包络线函数值
y2=sin(t).*sin(9*t);
3.2 二维统计分析图的绘制
(1)条形图。
MATLAB中提供了多个函数可绘制各种条形图,bar函数绘制柱形图,barh函数绘制水平条形图,stem函数绘制杆图,errorbar函数绘制误差条图。下面以bar函数为例,说明条形图函数的用法。bar函数的基本用法与plot函数相似,其调用格式为
bar(x,width,style):
当x是m × n阶的矩阵时,绘制的条形图以分组或堆积的形式表现。矩阵中每一行元素绘制在一组中,每一列元素绘制在每组中相对应的位置上。其中,width设置条形的相对宽度和控制在一组内条形的间距,默认值为0.8,style指定条形的排列模式,类型有'group'(分组)和 'stack'(堆积),默认时采用'group'模式。
(2)饼图。
饼图能反映每一数值相对于总数值的大小。MATLAB中绘制饼图的函数是pie,其调用格式为
6
pie(x,explode)
pie函数使用x中的数据绘制一个饼图,x可以是向量或矩阵。explode是与x同等大小的向量或矩阵,与explode的非零值对应的部分将从饼图中心分离出来。默认explode时,饼图是一个整体。
【例3.2】表3.1所示为某公司3类产品个季度的销售额(万元),分别按季度绘制簇状形图和堆积条形图。用饼图分析例3.10中产品A该年度各季度的产品销售情况。
表3.1 产品全年销售额(单位:万元)
x=[51,82,34,47;67,78,68,90;78,85,65,50]'; subplot(1,2,1); bar(x,'group');
title('Group');axis([0 5 0 100]); subplot(1,2,2); barh(x,'stack'); title('Stack');
pie(x(:,1),[0 0 0 1]) title('饼图');
legend('一季度','二季度','三季度','四季度');
7
(3)散点图。
散点图是数据点在直角坐标系平面上的分布图。MATLAB中绘制散点图的函数是scatter,其调用格式为
scatter(x,y,s,c,'filled')
其中,x、y、s和c为同等大小的向量。x和y用于定位数据点;s指定绘图点的大小,s也可以是一个标量,则所有数据点同等大小;c指定绘图所使用的色彩,c也可以是一个标量,所有数据点使用同一种颜色;'filled'表示填充绘图点,默认时,数据点是空心的。
3.3 三维图形的绘制
3.3.1 三维曲线
最基本的三维图形函数为plot3,其调用格式为
plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n)
其中,每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同。当x、y、z是同维向量时,则x、y、z对应元素构成一条三维曲线;当x、y、z是同维矩阵时,则以x、y、z对应列元素绘制三维曲线,曲线条数等于矩阵列数。
【例3.3】绘制三维曲线。 程序如下: t=0:pi/10:10*pi; x=sin(t)+t.*cos(t); y=cos(t)-t.*sin(t); z=t;
plot3(x,y,z);
axis([-30 30 -30 30 0 35]) title('Line in 3-D Space');
xlabel('X');ylabel('Y');zlabel('Z'); grid on;
3.3.2 三维曲面
MATLAB中绘制三维网格图和曲面图,先要生成在x?y平面的网格数据,再以一组z
8
轴的数据对应到这个二维的网格,然后调用绘图函数绘制。
(1).产生三维数据
在MATLAB中产生三维图形数据的方法是:将x方向区间[a,b]分成m份,将y方向区间[c,d]分成n份,由各划分点分别作平行于两坐标轴的直线,将区域[a,b]×[c,d]分成m×n个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后求对应网格坐标的Z矩阵。
MATLAB中的meshgrid函数可以将向量转换为矩阵。meshgrid函数的调用格式为 [X,Y]=meshgrid(x,y); 其中x、y为向量。
(2).绘制三维曲面的函数
MATLAB提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用于绘制三维网格图;surf用于绘制三维曲面图,各线条之间的补面用颜色填充。surf函数和mesh函数的调用格式为
mesh(x,y,z,c) surf(x,y,z,c)
一般情况下,x、y、z是维数相同的矩阵。x、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c默认时,MATLAB认为c = z,即颜色的设定是正比于图形的高度的,这样就可以画出层次分明的三维图形。当x,y是向量时,要求x的长度等于z矩阵的列,y的长度等于z矩阵的行,x、y向量元素的组合构成网格点的x、y坐标,z坐标则取自z矩阵,然后绘制三维曲面图。
【例3.4】绘制三维曲面图z = sinx2 + cosy2,x?[0,?],y?[0,?/2]。 程序如下:
[x,y]=meshgrid(0:pi/100:pi, 0:pi/100:pi/2); z=sin(x.^2)+cos(y.^2); mesh(x,y,z);
axis([0 4 0 1.8 -1.5 1.5]);
9
(3).标准三维曲面
(a)sphere函数。sphere函数用于绘制三维球面,其调用格式为 [x,y,z]=sphere(n)
该函数将产生(n + 1)×(n + 1)矩阵x、y、z,采用这3个矩阵可以绘制出圆心位于原点、半径为1的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。n决定了球面的圆滑程度,其默认值为20。若n值取得较小,则将绘制出多面体表面图。
(b)cylinder函数。cylinder函数用于绘制柱面,其调用格式为 [x,y,z]= cylinder(R,n)
其中,R是一个向量,存放柱面各个等间隔高度上的半径;n表示在圆柱圆周上有n个间隔点,默认时表示有20个间隔点。例如,cylinder(3)生成一个圆柱,cylinder([10,1])生成一个圆锥,而
t=0:pi/100:4*pi; R=sin(t); cylinder(R,30) 生成一个正弦型柱面。
(c)peaks函数。peaks函数(多峰函数)常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,例如:
z = peaks(30);
将生成一个30 × 30的矩阵z,即分别沿x和y方向将区间[?3,3]等分成29份,并计算这些网格点上的函数值。默认参数时将生成一个49 × 49的矩阵。也可以根据网格坐标矩阵x、y重新计算函数值矩阵。例如:
[x,y]=meshgrid(-5:0.1:5); z=peaks(x,y);
生成的数值矩阵可以作为mesh、surf等函数的参数而绘制出多峰函数曲面图。另外,若在调用peaks函数时不带输出参数,则直接绘制出多峰函数曲面图。
10