第七章——绘制 3D 图表和统计地图

学习目标
★掌握 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 plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
2.add_subplot() 方法
在调用 add_subplot() 方法添加绘图区域时为该方法传入 projection='3d',即指定坐标系的
类型为三维坐标系,返回一个 Axes3D 类的对象。
创建 Axes3D 类对象的示例代码如下 :
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = 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 plt
from mpl_toolkits.mplot3d import axes3d
fig = 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 Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
x1 = 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 所示。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值