学习matlab(九)——绘图(三维)

目录

(1)plot3()函数

(2)peaks()函数

(3)mesh()函数

(4)surf()函数

(5)柱面图

(6)球状图

(7)三维等高线图

(8)柱状图

(9)饼状图

(10)散点图

(11)火柴杆图

(12)三维向量场图

(13)彗星图

(14)填充图

 (15)三维彩带图

(16)非网络数据绘图

(17)三维隐函数绘图

(18)其他功能

(19)图形的输出方法


在MATLAB中,三维图形包括三维曲线、三维网格图和三维曲面图,分别采用函数plot3( )、函数mesh()和surf( )进行绘制。本章还将介绍一些特殊的三维图形绘制,重点讲解三维图形的视角、色彩和光照等控制工具,以及图形的打印和输出等。下面分别进行介绍。MATLAB语言提供了三维绘图功能,这些功能与二维图形的绘制有很多的相似之处,例如曲线的属性设置完全相同。最常用的三维绘图包括三维曲线图、三维网格图和三维曲面图等。完整的三维绘图流程,通常包括绘图的数据,设置图形窗口,图形的视角、颜色和光照等效果,以及坐标轴和图形标注的设置等。

x=-10:0.1:10;
y=-10:0.1:10;
[X,Y]=meshgrid(x,y);
z=X.^2+Y.^2;
surf(x,y,z);
view([50 70])
colormap('cool');
shading interp;
light('Position',[1 0.4 0.4]);
axis square;
xlabel('x');
ylabel('y');
zlabel('z');

(1)plot3()函数

在MATLAB中,利用函数plot3()绘制三维曲线图,该函数的调用格式为:plot3(x, y,z):该函数绘制三维曲线,参数x、y和z是有相同的维数的向量。plot3(X,Y,Z):该函数中参数X、Y和Z为具有相同维数的矩阵,将参数X、Y和Z的每一列绘制一条曲线,同时绘制多条曲线。plot3(X,Y,Z,s):该函数和二维绘图函数plot()类似,可以设置曲线的线型和颜色等信息,以及数据点的标记等。
 

t=linspace(0,20*pi,500);
x=t.*sin(t);
y=t.*cos(t);
z=t;
plot3(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');

(2)peaks()函数

在MATLAB中,提供了一个peaks()函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。peaks:该函数绘制三维曲面,默认大小为49*49.peaks(n):该函数绘制三维曲面,三维曲面数据为n*n。z=peaks:产生默认大小为49*49的矩阵,不绘制三维曲面。z=peaks(x, y):该函数计算输入参数为x和y的方程的值,不绘制三维曲面。[x, y, z]=peaks:该函数产生3个矩阵x、y和z,大小都为49*49,不绘制三维曲面。[x, y, z]=peaks(n):该函数产生3个矩阵x、y和z,大小都为n*n,不绘制三维曲面。

[a,b,c]=peaks(20);
peaks

(3)mesh()函数

在MATLAB中,采用函数meshgrid( )产生平面区域内的网格坐标矩阵。

x=-2*pi:2*pi;
y=-2*pi:2*pi;
[X,Y]=meshgrid(x,y);
plot(X,Y,'o');

在MATLAB中,采用函数mesh()绘制三维网格图,该函数将曲面上的点用线条连接起来,网格对应的曲面区域则显示为空白。该函数的调用格式为: mesh(X,Y,z, c):该函数绘制彩色的三维网格图,其中矩阵X和Y控制x轴和y轴,矩阵Z为z轴数据,图形的颜色采用参数c设置。在MATLAB中,采用函数meshc()绘制带有等高线的三维网格图,采用函数meshz()绘制带有底座的三维网格图。这两个函数的用法与函数mesh()类似。此外,还可以采用函数waterfall()绘制三维网格图。

[X,Y]=meshgrid(-3:0.1:3);
Z=5*X.^2-Y.^2+3;
subplot(121);
plot3(X,Y,Z);
subplot(122);
mesh(X,Y,Z);
xlabel('x');
ylabel('y');
zlabel('z');

(4)surf()函数

在MATLAB中,采用函数surf()绘制三维曲面图。该函数的调用格式为: surf(X, Y,Z,c):该函数绘制彩色的三维曲面图,其中矩阵X和Y控制x轴和y轴,矩阵Z为z轴数据,图形的颜色采用参数c设置。在MATLAB中采用函数surfc()绘制带有等高线的三维曲面图,通过函数surfl()添加三维曲面的光照效果,调用方式和surf( )相同。

[X,Y]=meshgrid(-3:0.1:3);
Z=peaks(X,Y);
subplot(121);
surf(X,Y,Z);
subplot(122);
surfc(X,Y,Z);
xlabel('x');
ylabel('y');
zlabel('z');

(5)柱面图

在MATLAB中,可以通过函数cylinder( )产生柱面图的数据,然后采用函数mesh( )方便的绘制出三维旋转体。

t=0:pi/20:3*pi;
r=5+cos(t);
[x,y,z]=cylinder(r,30);
mesh(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');

(6)球状图

在MATLAB中,可以通过函数sphere()绘球面图。该函数的调用格式为:[X,Y,Z]=sphere(N):该函数产成3个(N+1)*(N+1)的矩阵,利用函数surf(×,Y,Z)可产生单位球面。[X,Y,Z]=sphere:该函数产生3个的矩阵,默认值。sphere(N):该函数只绘制球面图而不返回任何值。

subplot(121);
sphere(30);
subplot(122);
[x,y,z]=sphere;
surf(10*x,10*y,10*z);
axis('equal');
colormap('hot');

(7)三维等高线图

在MATLAB中,可以通过函数contour3()绘制三维等高线图。该函数的调用格式和绘制二维等高线的函数contour()非常相近,用户可以在命令行窗口输入: helpcontour3查询该函数的详细使用方法。

Z=peaks;
subplot(121);
contour(Z,20);
subplot(122);
contour3(Z,20)
axis([-inf inf -inf inf -inf inf])

(8)柱状图

在MATLAB中,采用函数bar3()绘制三维柱状图,该函数的调用格式和函数bar( )非常相近。用户可以在命令行窗口输入:help bar3来查看该函数的详细介绍。此外,还可以采用bar3h(绘制水平三维柱状图,该函数的调用方式和函数bar3()箱同。

x=[1:6;3:8;7:12];
bar3(x',0.3);

(9)饼状图

在MATLAB中,采用函数pie3()绘制三维饼状图,该函数的调用格式和二维饼状图绘图函数pie()基本相同。如果用户需要查看函数pie3()的详细使用情况,可以在命令行窗口输入:help pie3.

x=[0.2 0.1 0.25 0.15 0.16];
y=[3 5.5 7 10.5 8.5];
subplot(121);
pie3(x);
subplot(122);
explode=[0 0 0 1 0];
pie3(y,explode);

(10)散点图

在MATLAB中,采用函数scatter3()绘制三维散点图,该函数的调用格式和二维散点图函数scatter()非常相近。如果用户需要查看函数scatter3( )的详细使用情况,可以在命令行窗口输入: help scatter3.

x=rand(1,20);
y=rand(1,20);
z=x+y;
subplot(121);
scatter3(x,y,z);
subplot(122);
scatter3(x,y,z,'r','filled');

(11)火柴杆图

在MATLAB中,采用函数stem3()绘制三维火柴杆图,该函数的调用格式和二维火柴杆绘图函数stem()非常相近。用户可以在MATLAB的命令行窗口输入:help stem3查看该函数的详细使用情况。

x=rand(1,20);
y=rand(1,20);
z=x+y;
subplot(121);
stem3(x,y,z);
subplot(122);
stem3(x,y,z,'r','filled');

(12)三维向量场图

在MATLAB中,采用函数quiver3()绘制三维向量场图,该函数的调用格式和二维向量场图绘制函数quiver()非常相近。用户可以在命令行窗口输入:help quiver3,查看该函数的详细使用情况。

[X,Y]=meshgrid(-3:0.3:3);
Z=-3*X.^2-Y.^2;
[U,V,W]=surfnorm(X,Y,Z);
subplot(121);
quiver3(X,Y,Z,U,V,W,0.2);
subplot(122);
quiver3(X,Y,Z,U,V,W);
hold on;
surf(X,Y,Z);

(13)彗星图

在MATLAB中,采用函数comet3()绘制三维彗星图,该函数的调用格式和二维彗星图的绘图函数comet()非常相近。用户可以在MATLAB的命令行窗口输入:help comet3查询该函数的详细使用情况。

t=-pi:pi/400:pi;
x=sin(5*t);
y=cos(3*t);
z=t;
comet3(x,y,z);

(14)填充图

在MATLAB中,采用函数fill3()绘制三维填充图,该函数的调用格式和二维填充图函数fil()基本相同。用户可以在MATLAB的命令行窗口输入:help fill3查询该函数的详细介绍。

x=rand(1,10);
y=rand(1,10);
z=x-y;
fill3(x,y,z,'b');

 (15)三维彩带图

在MATLAB中,采用函数ribbon()绘制三维彩带图,该函数的调用格式为:ribbon(X, Y):该函数绘制三维彩带图,和函数plot()类似。ribbon(Y):该函数绘制三维彩带图,X默认为X=1:size(Y,1)。ribbon(X, Y, width):该函数绘制三维彩带图,采用参数width设置线条的宽度。

x=0:pi/20:2*pi;
y=sin(x);
subplot(121);
ribbon(x,y,2);
subplot(122);
ribbon(cos(x));
xlabel('x');
ylabel('y');
zlabel('z');

(16)非网络数据绘图

在MATLAB中,采用函数mesh()和surf()绘图时,要求数据时均匀分布的网格数据。如果数据不是网格数据,可以采用函数meshgrid()创建插值的网格数据。Zl=griddata(X,Y, Z, XI,YI):该函数中采用数据X、Y和Z建立插值函数Z=F(X,Y),然后计算数据(I,YI)处的插值结果ZI。Zl=griddata(X, Y,z, XI, Yl, method):该函数中采用参数method设置插值的算法,可以为:‘linear'为线性插值算法,系统的默认值;‘'cubic'为三次插值,‘nearest'为临近点插值等。

在MATLAB中,采用函数patch()绘制三维片块图,该函数的调用格式为:patch(X, Y,Z):该函数创建有参数X、Y和Z为项点的空间多边形。patch(X,Y,z,C):该函数中参数C用于设定颜色。

(17)三维隐函数绘图

在MATLAB中,有一些简易绘制三维图形的函数,可以绘制隐含数的三维图形,这些函数如表所示。下面对这些函数分别进行介绍。

函数 说明
ezplot3() 绘制三维曲线
ezmesh3() 绘制三维网格图
ezmeshz() 绘制带等高线的三维网格图
ezsurf() 绘制三维曲面面
ezsurfc() 绘制带等高线的三维曲面图

(18)其他功能

对于三维图形,从不同的视角查看会得到不同的侧面和结果。在MATLAB中,采用函数view()设置三维图形的视角,该函数的调用格式为:view(az, el)或view([az, el]):该函数设置视角的位置,在方位角为az和仰角为el,它们都以度为单位view([x, y, z]):该函数设置视角为向量[x, y,z]所指的方向。view(2):该函数为默认的二维视角。view(3):该函数为默认的三维视角。[az, el]=view:该函数返回当前的视角az和el.

在MATLAB中,采用函数rotate3D()设置图形的三维视角,该函数的调用格式为:rotate3d on或rotate3d('on'):该函数打开图形的三维视角,可以方便的用鼠标来控制视角的变化,并进行图形的实时更新。rotate3d off或rotate3d('off'):该函数关闭图形的三维视角功能。rotate3d:该函数在rotate3d on和rotate3d off间进行切换。在利用函数mesh()绘制三维网格图时,默认情况下隐藏三维图形中被遮挡的部分。可以采用函数hidden()显示图形的诱视效果。

在MATLAB绘图时,可以使用颜色信息让图形更加生动和直观。MATLAB中可以采用RGB真彩色和色图着色。RGB真彩色是采用颜色映像来处理颜色的,即RGB色系。计算机中的各种颜色都是通过三原色(红、绿和蓝)按照不同的比例调制出来的。颜色映象中每一种颜色的值为一个的向量,其中R、G和B为0到1之间的数,即红、黄、蓝三种颜色的强度,形成一种特定的颜色。除了真彩色,还可以采用色图着色。在MATLAB中内置了很多的色图函数。

jet hsv的一种变形
hsv 色彩饱和值
hot 从黑到红到黄到白
cool 青蓝和洋红的色度
spring 粉色到黄色
summer 从青色到黄色
autumn 红色到黄色
winter 蓝色到青色
gray 线性灰度
bone 带一点蓝色的长度
copper 线性铜色度
pink 粉红的彩色度
lines 线性色图

在MATLAB中,可以采用函数rgbplot()绘制色图。采用函数colorbar()给当前的图形窗口添加颜色条,显示当前坐标轴的色图。采用函数brighten()增亮或变暗图形的色图。利用函数caxis()控制颜色轴的刻度,数值和颜色的对应关系以及颜色的显示范围等。采用函数shading()控制曲面图形的着色方式,该函数用于三维网格图、三维曲面图和三维填充图。采用函数colordef()设置图形的背景颜色。

在MATLAB中,可以给图形添加光照效果,利用函数light()建立光源,该函数的调用格式为:light:该函数给当前的图形添加光源,光源对象的属性值都是系统默认的。light(Prarm1,Value1, ...,ParamN, ValueN):该函数给参数Parm1赋值为Value1,以此类推,设置光源对象的各个属性值。L=light(...):该函数返回光源对象的句柄,获取句柄后,可以通过函数get()和set()获取和设置属性值。

在MATLAB中,利用函数lighting()设置光源的模式,该函数的调用格式为:lighting flat或lighting( 'flat'):该函数设置光源模式为flat,即平面模式,以网格为光照的基本单元。该模式为系统默认的模式。lighting gouraud或lighting('gouraud'):该函数设置光源模式为gouraud,即点模式,以像素为光照的基本单元。lighting phong或lighting('phong'):该函数设置光源模式为phong,以像素为光照的基本单元,并考虑了各点的反射。lighting none或lighting('none'):关闭光照效果。

在默认的图形窗口下,Camera控制条不显示。下面对几种典型的图形进行绘制,包括图形的透视效果、图形的镂空,以及用三维图形表现四维的数据等。

[x,y,z]=sphere(40);
surf(x,y,z);
shading interp;
hold on;
mesh(2*x,2*y,2*z);
hold off;
hidden off;
axis off;

(19)图形的输出方法

<1>copy figure;

<2>print()函数;

<3>print preview;

猜你喜欢

转载自blog.csdn.net/qq_35789421/article/details/115368734