matplotlib中绘画3d图案的工具——mplot3d
python的matplotlib画图库主要定位是绘画2d的图案,而绘画3d图案只是它的附加功能,所以其处在matplotlib的mpl_toolkits 子库中。主要为用户提供在3d空间中绘画散点图、线图、曲面图等简单图案的能力。
简单文档
getting started
在matplotlib中每一个图片由figure, axes构成,在mpl_toolkits.mplot3d 中专门为绘画3d图案提供了一个Axes3D类,通过下面的语句进行引用
1 | import matplotlib.pyplot as plt |
绘画线段
调用Axes3D实例的plot方法,参数如下
| 参数 | 说明 |
|---|---|
| xs, ys | 分别传入x轴、y轴的坐标 |
| zs | 传入对应与xs、ys的zs值 |
| zdir | [‘x’, ‘y’, ‘z’] ,绘画2d图案时,指定值为常数的轴 |
1 | z = np.arange(0, 20, 0.05) |

散点图
调用Axes3D实例的scatter方法, 参数如下:
| 参数 | 说明 |
|---|---|
| xs, ys | 同上 |
| zs | 同上 |
| zdir | 同上 |
| s | 设置每一个散点的大小, 该参数要么是一个标量,要么是一个与xs相同长度的向量 |
| c | 设置每个点的颜色。c可以是一个代表颜色的字符 , 或者是一个与xs长度相同的代表颜色的字符数组 |
线框绘制
调用Axes3D实例的plot_wireframe(X, Y, Z, *args, **kwargs)
| 参数 | 说明 |
|---|---|
| X、Y | 二维的数据 |
| Z | |
| rstride | 行抽样间隔, 默认是1 |
| cstride | 列抽样间隔, 默认是1 |
| rcount | 使用的行样本的最大值, 默认为50 |
| ccount | 使用列样本的最大值, 默认为50 |
1 | from mpl_toolkits.mplot3d import axes3d |

曲面绘制
曲面的绘制有点像在线框图中的每一个方格填充颜色,matplotlib中的曲面是由一块块的小的表面构成。
调用Axes3D实例的plot_surface(X, Y, Z, *args, **kwargs)
| 参数 | 说明 |
|---|---|
| X, Y, Z | 二维的数据 |
| rstride, cstride, rcount, ccount | 同wire_frame |
| color | 曲面每一个小块的颜色 |
| cmap | |
| facecolors | |
| norm |
1 | from matplotlib import cm |
等高线绘制
调用Axes3D实例的contour(X, Y, Z, *args, **kwargs)
| 参数 | 说明 |
|---|---|
| X, Y | numpy.array的实例 |
| Z | |
| extend3d | 默认为False |
| stride | 抽样间隔 |
| zdir | 默认是’z’ |
| offset | 将等高线投影在指定的 zdir平面的 offset 位置 |
1 | ax.plot_surface(X, Y, Z, alpha=0.3) |

与3d绘画有关的几个函数
np.mgrid[x_start : x_stop : x_step, y_start: y_stop: y_step], 该函数用于生成平面坐标的X,Y
np.dstack((X, Y)), 将分离的X轴坐标和Y轴坐标组合成X_Y 平面坐标
1
2
3X, Y = np.mgrid[0:2:1, 0:3:1]
pos = np.dstack((X, Y))
z = some_func(pos)
比如说画一个二维正态分布的概率密度函数图
1 | Xx, Yy = np.mgrid[-3:3:0.05, -3:3:0.05] |
