学习目标★掌握 mplot3d 工具包的用法,可熟练地使用 mplot3d 绘制常见的 3D 图表★掌握 animation 模块的用法,可熟练地使用 animation 制作动画★掌握 basemap 工具包的用法,可熟练地使用 basemap 绘制统计地图matplotlib 不仅专注于二维图表的绘制,也具有绘制 3D 图表、统计地图的功能,并将这些功能分别封装到工具包 mpl_toolkits.mplot3d、mpl_toolkits.base map 中,另外可以结合animation 模块给图表添加动画效果。下面将对 mplot3d 工具包、animation 模块和 basemap 工具包的相关内容进行详细介绍。
7.1 使用 mplot3d 绘制 3D 图表7.1.1 mplot3d 概述mplot3d 是 matplotlib 中专门绘制 3D 图表的工具包,它主要包含一个继承自 Axes 的子类Axes3D,使用 Axes3D 类可以构建一个三维坐标系的绘图区域。matpl otlib 可以通过两种方式创建 Axes3D 类的对象 :一种方式是 Axes3D() 方法,另一种方式是 add_subplot() 方法,具体介绍如下。1.Axes3D() 方法Axes3D() 是构造方法,它直接用于构建一个 Axes3D 类的对象,Axes3D() 方法的语法格式如下所示 :Axes3D(fig, rect=None, * args, azim=-60, elev=30, zscale=None,sharez=None, proj_type='persp', ** kwargs)该方法的参数 fig 表示所属画布,rect 表示确定三维坐标系位置的元组。创建 Axes3D 类对象的示例代码如下 :import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = Axes3D(fig)2.add_subplot() 方法在调用 add_subplot() 方法添加绘图区域时为该方法传入 projection='3d',即指定坐标系的类型为三维坐标系,返回一个 Axes3D 类的对象。创建 Axes3D 类对象的示例代码如下 :import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = fig.add_subplot(111, projection='3d')
需要注意的是,官方推荐使用第 2 种方式创建 Axes3D 类的对象。Axes3D 类中提供了一些用于设置标题和坐标轴的方法,Axes3D 类的常用方法及其说明如表 7-1 所示。
7.1.2 绘制常见的 3D 图表常见的 3D 图表包括 3D 线框图、3D 曲面图、3D 柱形图、3D 散点图等。Axes3D 类中提供了一些绘制常见 3D 图表的方法,关于这些方法的说明如表 7-2 所示。
下面以 3D 线框图和 3D 曲面图为例,演示如何使用 plot_wireframe() 和 plot_surface() 绘制3D 线框图和 3D 曲面图。1.绘制 3D 线框图Axes3D 类的对象使用 plot_wireframe() 方法绘制线框图,plot_wireframe() 方法的语法格式如下所示 :plot_wireframe(self, X, Y, Z, * args, ** kwargs)该方法常用参数的含义如下。·X,Y,Z :表示 x 、 y 、 z 轴的数据。·rcount,ccount :表示每个坐标轴方向所使用的最大样本量,默认为 50。若输入的样本
量更大,则会采用降采样的方式减少样本的数量 ;若输入的样本量为 0,则不会对相应坐标轴方向的数据进行采样。·rstride,cstride :表示采样的密度。若仅使用参数 rstride 或 cstride 中任意一个,则另一个参数默认为 0。需要注意的是,参数 rstride、cstride 与参数 rcount、ccount 是互斥关系,它们不能同时被使用。绘制 3D 线框图的示例代码如下。In [1]:import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import axes3dfig = plt.figure()ax = fig.add_subplot(111, projection='3d')# 获取测试数据X, Y, Z = axes3d.get_test_data(0.05)# 绘制 3D 线框图ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)plt.show()以上代码首先导入了 pyplot、axes3d 模块,其次创建了一个画布 fig 和 Axes3D 类的对象ax,然后使用 axes3d 模块的 get_test_data() 函数获取了一些自带的测试数据,最后调用 plot_wireframe() 方法绘制了一个 3D 线框图。运行程序,效果如图 7-1 所示。
2.绘制 3D 曲面图Axes3D 类的对象使用 plot_surface() 方法绘制 3D 曲面图,该方法的语法格式如下所示 :plot_surface(self, X, Y, Z, * args, norm=None, vmin=None, vmax=None,lightsource=None, ** kwargs)该方法常用参数的含义如下。·X,Y,Z :表示 x 、 y 、 z 轴的数据。·rcount,ccount :表示每个坐标轴方向所使用的最大样本量,默认为 50。
·rstride,cstride :表示采样的密度。·color :表示曲面的颜色。·cmap :表示曲面的颜色映射表。·shade :表示是否对曲面进行着色。绘制 3D 曲面图的示例代码如下。In [2]:from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltfrom matplotlib import cmimport numpy as npx1 = np.arange(-5, 5, 0.25)y1 = np.arange(-5, 5, 0.25)x1, y1 = np.meshgrid(x1, y1)r1 = np.sqrt(x1 ** 2 + y1 ** 2)z1 = np.sin(r1)fig = plt.figure()ax = fig.add_subplot(111, projection='3d')# 绘制曲面图ax.plot_surface(x1, y1, z1, cmap=cm.coolwarm, linewidth=0,antialiased=False)# 设置 z 轴刻度的范围、 位置、 格式ax.set_zlim(-1.01, 1.01)plt.show()运行程序,效果如图 7-2 所示。![]()
第七章——绘制 3D 图表和统计地图
最新推荐文章于 2024-05-14 11:11:09 发布