第5章 数据可视化——5.3 三维图形绘制

简介: 第5章 数据可视化——5.3 三维图形绘制

5.3  三维图形绘制


在实际的工程应用中,常常遇到三维甚至更多维的数据,需要在图形中表示出来,MATLAB平台提供了相应的三维图形的绘制功能。这些绘图功能与二维图形的绘制十分类似,特别是曲线的属性,例如线型、颜色等的设置,是完全相同的。

最常用的三维绘图有三维曲线图、三维网格图和三维曲面图这3种基本类型,相应的MATLAB指令分别为plot3meshsurf


5.3.1  曲线图绘制


在已经学习了plot指令的基础上,在三维图形指令中,plot3指令十分易于理解,其调用格式也与plot指令类似,具体如下。

● plot3(X,Y,Z):当XYZ为同维向量时,绘制以XYZxyz坐标的三维曲线;当XYZ为同维矩阵时,用XYZ的对应列元素绘制xyz坐标的三维曲线,曲线的条数为矩阵的列数。

● plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1Y1Z1X2Y2Z2xyz坐标的三维曲线。

● plot3(X,Y,Z,'PropertyName',PropertyValue,…):在PropertyName所规定的曲线属性下,绘制以XYZxyz坐标的三维曲线。

● plot3(X1,Y1,Z1,'PropertyName1',PropertyValue1,X2,Y2,Z2,'PropertyName2',Property Value2):在PropertyName1所规定的曲线属性下,绘制以X1Y1Z1xyz坐标的三维曲线;在PropertyName2所规定的曲线属性下,绘制以X2Y2Z2xyz坐标的三维曲线。需要说明的是,plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲面。


5-27plot3指令使用示例。

创建M文件并命名为ex5_27.m,利用M文件编辑器在M文件中输入:

clear all
theta = 0 : 0.01 * pi : 2 * pi;
x = sin(theta);
y = cos(theta);
z = cos(4 * theta);
figure
plot3(x, y, z, 'LineWidth', 2);hold on;
theta = 0 : 0.02 * pi : 2 * pi;
x = sin(theta);
y = cos(theta);
z = cos(4 * theta);
plot3(x, y, z, 'rd', 'MarkerSize', 10, 'LineWidth', 2)

运行M文件,结果如图5-29所示。

cb30588017e26db4307f6d34be9e366d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-29  三维曲线运行结果


5.3.2  网格图绘制


三维网格图和曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理。绘制函数z=f(x,y)的三维网格图的过程如下。

1)确定自变量xy的取值范围和取值间隔如下:

x = x1 : dx : x2, y = y1 : dy : y2


2)构成xoy平面上的自变量采样格点矩阵。

利用格点矩阵的原理生成矩阵。

x = x1 : dx : x2; y = y1 : dy : y2;
X = ones(size(y)) * x;
Y = y * ones(size(x));

利用meshgrid指令生成格点矩阵。

x = x1 : dx : x2; y = y1 : dy : y2;
[X, Y] = meshgrid(x, y);


3)计算在自变量采样格点上的函数值:z=f(x,y)

绘制网格图的基本mesh指令的调用格式如下。

● mesh(X,Y,Z):以Xx轴自变量、Yy轴自变量,绘制网格图;XY均为向量,若XY长度分别为mn,则Zm×n的矩阵,即[m,n]=size(Z),则网格线的顶点为(Xj ,Yi ,Zij)

● mesh(Z):以Z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制网格图。

● mesh(X,Y,Z,C):以Xx轴自变量、Yy轴自变量,绘制网格图;其中C用于定义颜色,如果不定义C,则成为mesh(X,Y,Z),其绘制的网格图的颜色随着Z值的变化(曲面高度)而变化。

● mesh(X,Y,Z,'PropertyName ',PropertyValue,…):以Xx轴自变量、Yy轴自变量,绘制网格图;PropertyValue用来定义网格图的标记等属性。


5-28mesh指令使用示例。

创建M文件并命名为ex5_28.m,利用M文件编辑器在M文件中输入:

clear all
X = -10 : 0.1 : 10;
Y = -10 : 0.1 : 10;
[X, Y] = meshgrid(X, Y);
Z = - X .^ 2 - Y .^ 2 + 200;
mesh(X, Y, Z)

运行M文件,结果如图5-30所示。

cc34d470eb13328796c27ae818c6b829_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-30  3dmesh.m文件运行结果


5.3.3  曲面图绘制

曲面图的绘制由surf指令完成,该指令的调用格式与mesh指令类似,具体如下。

● surf(X,Y,Z)

● surf(Z)

● surf(X,Y,Z,C)

● surf(X,Y,Z,'PropertyName',PropertyValue,…)

mesh指令所绘制的图形是网格划分的曲面图,而surf指令绘制得到的是平滑着色的三维曲面图,着色的方式是在得到相应的网格点后,对每一个网格依据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色。


5-29surf指令与mesh指令对比示例。

创建M文件并命名为surfxyz.m(同时存为ex5_29.m),利用M文件编辑器在M文件中输入:

clear all
[x, y, z] = peaks(25);
figure
surf(x, y, z)
mesh(x, y, z)

运行M文件,结果如图5-31所示。

f3988db7736142103b9335fd00d98e44_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-31  surfxyz.m运行结果


5.3.4  光照模型


光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能使表面微妙的差异更容易看到。光照也能用来对三维的图像增加现实感。


5-30:带光照的曲面图示例。

创建M文件并命名为ex5_30.m,利用M文件编辑器在M文件中输入:

clear all
[X, Y, Z] = peaks(30);
figure
surf(X, Y, Z, 'FaceColor', 'r', 'EdgeColor', 'none');
camlight left;
lighting phong
view(-15, 65)

运行M文件,结果如图5-32所示。

14f37f61607ff437cb512eae2ab16010_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-32  带光照的曲面图


本例中将曲面涂上了红色,并且将surf指令所定义的网格线移除。同时,一个发光的物体被加到了镜头的左边(从空间观看时所在表面的位置)。

增加光源和设置好照明方式到phong后,使用view命令去改变视角,从空间的另一个不同的点再观看表面(方位角-15°和仰角65°)。最后,用工具栏缩放方式放大外观。

基于运用漫射、镜面反光和环境照明模型,MATLAB中还内置了surfl函数,可以画出类似于函数surf产生的带彩色的曲面。使用一个单色颜色映像(如灰色、纯白、铜黄或粉红色)和插值色彩,会画出效果更好的曲面。其调用格式如下。

● surfl(X,Y,Z,S):其中S[Sx,Sy,Sz][az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°


5-31surfl指令应用示例。

创建M文件并命名为ex5_31.m,利用M文件编辑器在M文件中输入:

clear all
[X, Y, Z] = peaks(30);
subplot(1,2,1);
surfl(X, Y, Z),colormap(copper);
title('Default Lighting');
shading interp
subplot(1,2,2);
surfl(X, Y, Z, [-90 30], [0.55 0.6 2 10]);
shading interp

运行M文件,结果如图5-33所示。

857e7797cf409787e949adf99a90631d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-33  surfl指令运行结果


值得注意的是,插值上色会极大地降低打印速度。这是因为每一像素都有一个不同的颜色值,打印机对每个点都要分别上色。


5.3.5  绘制等值线图


等值线图又叫等高线图。绘制等值线图需要用到contour指令,其调用格式如下。

● contour(Z):以Z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制等值线图。

● contour(Z,n):其中n为所绘制的图形等值线的条数。

● contour(Z,v):其中v为向量,向量的长度为等值线的条数,并且等值线的值为对应的向量的元素值。

● contour(X,Y,Z):以Xx轴自变量、Yy轴自变量,绘制等值线图;XY均为向量,若XY长度分别为mn,则Zm×n的矩阵,即[m,n]=size(Z),则网格线的顶点为(Xj ,Yi ,Zij)

● contour(X,Y,Z,n):其中n为所绘制的图形等值线的条数。

● contour(X,Y,Z,v):其中v为向量,向量的长度为等值线的条数,并且等值线的值为对应的向量的元素值。

● surf(…,LineSpec):其中LineSpec用来定义等值线的线型。

contour作用相类似的指令还有contourf指令,其调用格式与contour指令相同。


5-32contour指令使用示例。

创建M文件并命名为ex5_32.m,利用M文件编辑器在M文件中输入:

clear all
[X, Y, Z] = peaks(30);
figure
subplot(2,2,1); contour(X, Y, Z); axis square
subplot(2,2,2); contour(X, Y, Z, 10); axis square
subplot(2,2,3); contour(X, Y, Z, -10 : 1 : 10); axis square
subplot(2,2,4); contour(X, Y, Z, ':'); axis square

运行M文件,结果如图5-34所示。

b2ce2e3cf528a63d1579710a3d150002_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5-34  contour指令运行结果


相关文章
|
自然语言处理 数据可视化 算法
第5章 数据可视化——5.4 四维图形可视化
第5章 数据可视化——5.4 四维图形可视化
|
6月前
|
存储 数据可视化 数据挖掘
利用Matplotlib实现地图可视化
【4月更文挑战第17天】使用Matplotlib结合GeoPandas和Basemap在Python中实现地图可视化。首先安装Matplotlib、GeoPandas和Basemap库。读取GeoJSON或Shapefile格式的地理数据,然后使用Basemap创建地图底图,绘制海岸线、国家边界和大陆湖泊。将GeoDataFrame数据转换后叠加到地图上,自定义地图样式和添加图例。利用颜色映射展示与地理位置相关的数值数据,创建颜色条。此外,可通过Folium实现交互式地图。通过学习和实践,提升地图可视化的技能。
|
6月前
|
数据可视化 测试技术 定位技术
数据可视化——如何绘制地图
数据可视化——如何绘制地图
|
数据可视化 搜索推荐 定位技术
GIS地图服务数据可视化
GIS地图服务数据可视化
225 0
|
数据可视化 关系型数据库
第5章 数据可视化——5.2 二维图形绘制(1)
第5章 数据可视化——5.2 二维图形绘制(1)
|
数据可视化 C#
第5章 数据可视化——5.2 二维图形绘制(2)
第5章 数据可视化——5.2 二维图形绘制(2)
|
自然语言处理 数据可视化 算法
第5章 数据可视化——5.2 二维图形绘制(3)
第5章 数据可视化——5.2 二维图形绘制(3)
|
自然语言处理 数据可视化
第5章 数据可视化——5.2 二维图形绘制(4)
第5章 数据可视化——5.2 二维图形绘制(4)
|
数据可视化
第5章 数据可视化——5.1 图形绘制
第5章 数据可视化——5.1 图形绘制
|
数据可视化 数据挖掘
R语言数据可视化-气泡图
气泡图(Bubble Chart)是一种展示三个或更多变量之间关系的二维图表。它与散点图类似,但是在每个数据点处加上了一个圆圈,圆圈的大小和第三个变量相关。因此气泡图不仅可以用于显示两个变量之间的关系,还可以同时显示第三个变量的大小或重要性,增加了数据展示的可读性和信息量。
423 0