在军事、地理等学科中,经常会到等值线。在MATLAB中有许多绘制等值线的命令。
1.contour3命令
contour3是三维绘图中最常用的绘制等值线的命令,利用该命令可生成一个定义在矩形格栅上曲面的三维等值线图,它的使用格式如下:
调用格式 说明
contour3(Z) 画出三维空间角度观看矩阵Z的等值线图,其中Z的元素被认为是距离x-y平面的高度,矩阵Z至少为2*2阶。自动选择等值线的条数与取值。
若[m,n] = size(Z),则x轴的范围为[1,n],y轴的范围为[1,m]
contour3(Z,n) 画出由矩阵Z确定的n条等值线的三维图
contour3(Z,v) 在参量v指定的高度上画出三维等高线,当然等值线条数与向量v的维数相同;若想只画一条高度为h的等值线,则输入:contour3(Z,[h,h])
contour3(X,Y,Z) 用X与Y定义x轴与y轴的范围。若X为矩阵,则X(1,:)定义x轴的范围;若Y为矩阵,则Y(:,1)定义y轴的范围;若X与Y同时为谈不来,则它们必须
contour3(X,Y,Z,n) 同型;若X或Y有不规则的间距,contour3还是使用规则的间隔计算等值线,然后将数据转变给X或Y
contour3(X,Y,Z,v)
contour3(...,s) 用参量s指定的线型与颜色画等值线
[C,h] = contour3(...) 画出图形,同时返回与命令contourc中相同的等值线矩阵C,包含所有图形对象的句柄向量h
例:绘制山峰函数peaks的等值线图。
>> close all >> [x,y,z] = peaks(30); >> contour3(x,y,z) >> title('山峰函数等值线图') >> xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis') >>
2.contour命令
contour3的二维图就等价于contour,后者用来绘制二维等值线,可以看作是一个三维曲面向xoy平面的投影,它的使用格式
调用格式 说明
contour(Z) 把矩阵Z中的值作为一个二维函数的值,等值线是一个平面的曲线,平面的高度v是MATLAB自动取的
contour(X,Y,Z) (x,y)是平面Z = 0上点的坐标矩阵,Z为相应点的高度值矩阵
contour(Z,n) 画出n条等值线
contour(X,Y,Z,n) 画出n条等值线
contour(Z,v) 在指定的高度v上画出等值线
contour(X,Y,Z,v) 等价于contour(Z,v)命令
[C,h] = contour(...) 返回等值线矩阵C和线句柄或块句柄列向量h,每条线对应一个句柄,句柄中的userdata属性包含每条等值线的高度值
contour(...,'linespec') 用指定的颜色或者线型画等值线
例:画出曲面在[-2π,2π]*[-2π,2π]的图像及其在xoy面的等值线图。
>> close all >> x = linspace(-2*pi, 2*pi, 100); >> y = x; >> [X,Y] = meshgrid(x,y); >> Z = X.*exp(-cos(X)-sin(Y)); >> subplot(1,2,1) >> surf(X,Y,Z) >> title('曲面图像') >> subplot(1,2,2) >> contour(X,Y,Z) >> title('二维等值线图') >>
3.contourf命令
此命令用来填充二维等值线图,即先画出不同等值线,然后将相邻的等值线之间用同一颜色进行填充,填充用的颜色决定于当前的色图颜色。
contourf的使用格式如下:
调用格式 说明
contourf(Z) 矩阵Z的等值线图,其中Z理解成为距平面的高度。Z至少为2*2阶的,等值线的条数与取值是自动选择的
contourf(Z,n) 画出矩阵Z的n条高度不同的等值线
contourf(Z,v) 画出矩阵Z的由v指定的高度的等值线图
contourf(X,Y,Z) 画出矩阵Z的等值线图,其中X与Y用于指定x轴与y轴的范围,若X与Y为矩阵,则必须与Z同型;若X或Y有不规则的间距,contour3
还是使用规则的间距计算等高线,然后将数据转变给X或Y
contourf(X,Y,Z,n) 画出矩阵Z的n条高度不同的等值线,其中X、Y参数同上
contourf(X,Y,Z,v) 画出矩阵Z的由v指定的高度的等值线图,其中X、Y参数同上
[C,h,CF] = contour(...) 画出图形,同时返回与命令contourc中相同的等高线矩阵C,C也可被命令clabel使用;返回包含patch图形对象的句柄向量h;返回一用 于填充用的矩阵CF
例:画出山峰函数peaks的二维等值线图。
>> close all >> Z = peaks; >> [C,h] = contourf(Z,10); >>
加一句灰度图后
>> colormap gray
4.contourc命令
该命令计算等值线矩阵C,该矩阵可用于命令contour、contour3和contourf等。矩阵Z中的数值用于确定平面上的等值线高度值,等值线的计算结果为由矩阵Z维数决定的间隔的宽度。
contourc命令的使用格式如下:
调用格式 说明
C = contourc(Z) 从矩阵Z中计算等值矩阵,其中Z的维数至少为2*2阶,等值线为矩阵Z中数值相等的单元,等值线的数目和相应的高度值是自动选择的
C = contourc(Z,n) 在矩阵Z中计算出n个高度的等值线
C = contourc(Z,v) 在矩阵Z中计算出给定高度向量v上的等值线,而向量v的维数决定了等值线的数目,若只要计算一条高度为a的等值线,输入:
contourc(Z,[a,a])
C = contourc(X,Y,Z) 在矩阵Z中参量X、Y确定的坐标轴范围内计算等值线
C = contour(X,Y,Z,n) 从矩阵Z中参量X、Y确定的坐标范围内画出n条等值线
C = contour(X,Y,Z,v) 从矩阵Z中参量X、Y确定的坐标范围内,画在v指定的高度上指定的等值线
5.clabel命令
clabel命令用来在二维等值线图中添加高度标签,它的使用格式如下:
调用格式 说明
clabel(C,h) 把标签旋转到恰当的角度,再插入到等值线中。只有等值线之间有足够的空间时才加入,这决定于等值线的尺度。其中C为高度矩阵
clabel(C,h,v) 在指定的高度v上显示标签
clabel(C,h,'manual') 手动设置标签。用户用鼠标左键或空格键在最接近指定的位置上放置标签,用键盘上的Enter键结束该操作
clabel(C) 在从命令contour生成的等高矩阵C的位置上添加标签。此时标签的放置位置是随机的
clabel(C,v) 在给定的位置v上显示标签
clabel(C,'manual') 允许用户通过鼠标来给等高线贴标签
对上面的使用格式,需要说明的一点是,若命令中有h,则会标签进行恰当的旋转;否则标签会竖直放置,且在恰当的位置显示一个“+”
例:绘制具有5个等值线的山峰函数peaks,然后对各个等值线进行标注,并给所画的图加上标题。
>> close all >> Z = peaks; >> [C,h] = contour(Z,5); >> clabel(C,h) >> title('等值线的标注') >>
6.ezcontour命令
该命令专门用来绘制符号函数f(x,y)的等值线图,它的使用格式如下:
调用格式 说明
ezcontour(f) 绘制f在系统默认的区域(-2π,2π)*(-2π,2π)上的等值线图
ezcontour(f,[a,b]) 绘制f在区域(a,b)*(a,b)上的等值线图
ezcontour(f,[a,b,c,d]) 绘制f在区域(a,b)*(c,d)上的等值线图
ezcontour(...,n) 绘制f在系统默认的区域(-2π,2π)*(-2π,2π)上的等值线图,其中网格数为n*n,n的默认值为60
例:画出下面函数的等值线图。
>> close all >> syms x y >> f = sin(x^2 + y^2)/(x^2 + y^2); >> ezcontour(f,[-pi,pi],30) >> title('符号函数等值线图') >>
7.ezsurfc命令
该命令用来绘制函数f(x,y)的带等值线的三维表面图,其中函数f是一个以字符串形式给出的二元函数.
ezsurf命令的使用格式如下:
调用格式 说明
ezsurfc(f) 绘制f在系统默认的范围(-2π,2π)*(-2π,2π)上带等值线的三维表面图
ezsurfc(f,[a,b]) 绘制f在区域(a,b)*(a,b)上带等值线的三维表面图
ezsurfc(f,[a,b,c,d]) 绘制在区域(a,b)*(c,d)上带等值线的三维表面图
ezsurfc(X,Y,Z) 绘制参数曲面x = x(s,t), y = y(s,t), z = z(s,t)在系数默认的区域(-2π,2π)*(-2π,2π)上带等值线的三维表面图
ezsurfc(X,Y,Z,[a,b]) 绘制上述参数曲面在(a,b)*(a,b)上的带等值线的三维表面图
ezsurfc(X,Y,Z,[a,b,c,d]) 绘制上述参数曲面在(a,b)*(c,d)上的带等值线的三维表面图
ezsurfc(...,n) 绘制f在系统默认的区域(-2π,2π)*(-2π,2π)上带等值线的三维表面图,其中网格数为n*n,n的默认值为60
ezsurfc(...,'circ') 在区域的中心圆盘上绘制f的带等值线的三维表面图
例:在区域[-π,π]*[-π,π]上绘制下面函数的带等值线的三维表面图。
>> close all >> syms x y >> f = exp(sin(x+y))/(x^2+y^2); >> subplot(1,2,1) >> ezsurfc(f,[-pi,pi]) >> title('网格数为60*60的表面图') >> subplot(1,2,2) >> ezsurfc(f,[-pi,pi],20) >> title('网格数为20*20的表面图') >>