《5-3-2三维数据可视化教学课件PPT.pptx》由会员分享,可在线阅读,更多相关《5-3-2三维数据可视化教学课件PPT.pptx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5-3-2三维数据可视化弘 德 明 志 博 学 笃 行第5章 数据可视化-Matplotlib第7讲 三维图形可视化2主讲人:刘志远弘 德 明 志 博 学 笃 行Contents目录013D3D曲面图曲面图02三翼面图三翼面图03网格图网格图弘 德 明 志 博 学 笃 行013D曲面图弘 德 明 志 博 学 笃 行3D曲面图的绘制使用曲面图的绘制使用Axes3D对象的对象的plot_surface()函数,其函数原型如下:函数,其函数原型如下:plot_surface(X, Y, Z, *args, *kwargs)其主要参数及含义如下:其主要参数及含义如下: X,Y,Z:三维坐标点;:三维坐
2、标点; rcount,ccount,rstride,cstride:同:同plot_wireframe()函数;函数; cmap:定义曲面块(:定义曲面块(patch)的颜色,其类型为)的颜色,其类型为colormap;图图5.35 三维曲面和轮廓图三维曲面和轮廓图等高线图3D曲面图弘 德 明 志 博 学 笃 行import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D# 创建创建 3D 图形对象图形对象fig = plt.figure()ax = Axes3D(fig)#生成
3、生成3D曲面图所需的数据,其中曲面图所需的数据,其中X和和Y向量合并为向量合并为2D空间网格空间网格X = np.arange(-2, 2, 0.1)Y = np.arange(-2, 2, 0.1)X, Y = np.meshgrid(X, Y)Z =np.sin(np.sqrt(X * 2 + Y * 2)#绘制绘制3D曲面图和其轮廓图,并使用曲面图和其轮廓图,并使用cmap着色着色ax.plot_surface(X, Y, Z,rstride=1,cstride=1, cmap=plt.get_cmap(rainbow)ax.contourf(X, Y, Z, zdir=z, offse
4、t=-2, cmap=plt.cm.winter)ax.set_zlim(-2,2) #限定限定z轴的取值范围轴的取值范围plt.show()3D曲面图弘 德 明 志 博 学 笃 行02三翼面图弘 德 明 志 博 学 笃 行三翼面图弘 德 明 志 博 学 笃 行三翼面图的绘制可使用三翼面图的绘制可使用Axes3D对象的对象的plot_trisurf()函数函数,其函数原型如下:,其函数原型如下:plot_trisurf(X,Y,Z,color,cmap,norm,vmin,vmax,shade,*args, *kwargs)其主要参数及含义如下:其主要参数及含义如下: X, Y, Z:作为一维
5、数组的输入数据,对应三维坐标点;:作为一维数组的输入数据,对应三维坐标点; color:曲面块的单一颜色值;:曲面块的单一颜色值; cmap:曲面块的颜色值,其类型为:曲面块的颜色值,其类型为colormap; norm:颜色映射值的规范化实例;:颜色映射值的规范化实例; vmin:颜色映射的最小值;:颜色映射的最小值; vmax:颜色映射的最大值;:颜色映射的最大值; shade:曲面颜色是否有阴影。:曲面颜色是否有阴影。图图5.36 三翼面图三翼面图三翼面图弘 德 明 志 博 学 笃 行import numpy as npimport matplotlib.pyplot as pltfro
6、m mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmn_angles = 64 #不同角度个数不同角度个数n_radii = 16 #不等长的半径个数不等长的半径个数#为消除重复点,不包括半径为消除重复点,不包括半径r=0,生成半径的一维数组,生成半径的一维数组radii = np.linspace(0.125, 1.0, n_radii)#不包括不包括2点,生成角度的一维数组点,生成角度的一维数组angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)#沿行方
7、向重复每个半径的所有角度沿行方向重复每个半径的所有角度angles = np.repeat(angles., np.newaxis, n_radii, axis=1)#将极坐标将极坐标(radii,angles)转换为笛卡尔坐标转换为笛卡尔坐标(x,y)#此处增加了此处增加了(0,0)点,且在点,且在(x,y)中没有重复点中没有重复点三翼面图弘 德 明 志 博 学 笃 行x = np.append(0, (radii * np.cos(angles).flatten()y = np.append(0, (radii * np.sin(angles).flatten()z = np.sin(-x
8、 * y) #Pringle曲面曲面fig = plt.figure()ax = Axes3D(fig) #创建创建3D图形对象图形对象ax.plot_trisurf(x, y, z, cmap=cm.cool, linewidth=0.2)ax.set_xlabel(X)ax.set_ylabel(Y)ax.set_zlabel(Z)plt.show()三翼面图弘 德 明 志 博 学 笃 行033D子图弘 德 明 志 博 学 笃 行图图5.37 三维空间中的子图三维空间中的子图3D子图弘 德 明 志 博 学 笃 行from mpl_toolkits.mplot3d import Axes3D
9、import matplotlib.pyplot as pltimport numpy as npfig = plt.figure() #创建画布创建画布ax1=fig.add_subplot(1,2,1,projection=3d) #添加第一个子图添加第一个子图#生成第一个子图需要的数据生成第一个子图需要的数据x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)y = np.sin(x)z = np.cos(x)3D子图弘 德 明 志 博 学 笃 行ax1.plot(x, y, z) #绘制第一个子图绘制第一个子图ax2=fig.add_subplot(1,2,2,projection=3d) #添加第二个子图添加第二个子图#生成第二个子图需要的数据生成第二个子图需要的数据X = np.arange(-2, 2, 0.1)Y = np.arange(-2, 2, 0.1)X, Y = np.meshgrid(X, Y)Z = np.sqrt(X * 2 + Y * 2)ax2.plot_surface(X,Y,Z,cmap=plt.cm.jet) #绘制第二个子图绘制第二个子图 plt.show()3D子图弘 德 明 志 博 学 笃 行小结:小结:掌握三翼面图、曲面图、网格图的基本绘制方式及应用。弘 德 明 志 博 学 笃 行谢谢大家