2.4 Matplotlib绘制三维图

我们可以很容易的使用matplotlib绘制三维图。下面我们来学习一些重要且常用的三维图。

本章节的主要内容包括:

一、绘制三维点

先看下面的示例:

# 导入库 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import style import numpy as np # 设置要使用的自定义样式 style.use('ggplot') # 创建图形 fig = plt.figure() # 在我们的图上创建一个新的子图,并将投影设置为3D ax1 = fig.add_subplot(111, projection='3d') # 定义X、Y、Z坐标 x = np.random.randint(0, 10, size=20) y = np.random.randint(0, 10, size=20) z = np.random.randint(0, 10, size=20) # 绘制子图上的点 ax1.scatter(x, y, z, c='m', marker='o') # 为轴设置标签 ax1.set_xlabel('x-axis') ax1.set_ylabel('y-axis') ax1.set_zlabel('z-axis') # 显示图 plt.show()

运行后的效果如下:

上面绘制的将是一个可以旋转或放大的视图。

代码解释:

from mpl_toolkits.mplot3d import axes3d 

这是在三维空间上绘图所需的模块。

ax1 = fig.add_subplot(111, projection='3d')

在这里,我们在图上创建一个子图,并将投影参数设置为3d。

ax1.scatter(x, y, z, c='m', marker='o')

使用**.scatter()**函数绘制XYZ平面中的点。

二、绘制三维条形图

先看下面的示例:

# 导入库 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import style import numpy as np # 设置要使用的自定义样式 style.use('ggplot') # 创建图形 fig = plt.figure() # 在我们的图上创建一个新的子图,并将投影设置为3D ax1 = fig.add_subplot(111, projection='3d') # 定义X、Y、Z坐标 x = [1,2,3,4,5,6,7,8,9,10] y = [4,3,1,6,5,3,7,5,3,7] z = np.zeros(10) # 条形图的大小 dx = np.ones(10) # 沿x轴的长度 dy = np.ones(10) # 沿y轴的长度 dz = [1,3,4,2,6,7,5,5,10,9] # bar的高度 # 设置颜色 color = [] for h in dz: if h > 5: color.append('r') else: color.append('b') # 绘制条形图 ax1.bar3d(x, y, z, dx, dy, dz, color = color) # 为轴设置标签 ax1.set_xlabel('x-axis') ax1.set_ylabel('y-axis') ax1.set_zlabel('z-axis') plt.show()

运行后的效果如下:

代码解释:

x = [1,2,3,4,5,6,7,8,9,10] y = [4,3,1,6,5,3,7,5,3,7] z = np.zeros(10)

在这里,我们定义条形的基本位置。设置z = 0表示所有条形均从XY平面开始。

dx = np.ones(10) # 沿x轴的长度 dy = np.ones(10) # 沿y轴的长度 dz = [1,3,4,2,6,7,5,5,10,9] # bar的高度

dx,dy,dz表示条形的大小,它是一个长方体,dx,dy,dz分别是沿x,y,z轴的长度。

color = []
for h in dz:
	if h > 5:
		color.append('r')
	else:
		color.append('b')

在这里,我们将每个条形图的颜色设置为列表。对于高度大于5的条形图,颜色方案为红色,否则为蓝色。

ax1.bar3d(x,y,z,dx,dy,dz,color = color)

最后,为了绘制条形图,我们使用**.bar3d()**函数。

三、绘制三维曲线

先看下面的示例:

# 导入所需模块 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import style import numpy as np # 设置要使用的自定义样式 style.use('ggplot') # 创建新图形 fig = plt.figure() # 在图上创建一个新的子图 ax1 = fig.add_subplot(111, projection='3d') # 获取网格点 u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j] # 设置X、Y、Z坐标 x = np.cos(u)*np.sin(v) y = np.sin(u)*np.sin(v) z = np.cos(v) # 绘制曲线 ax1.plot_wireframe(x, y, z, rstride=5, cstride=5, linewidth=1) # 显示 plt.show()

程序运行后效果如下:

代码解释:

u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j]

我们使用np.mgrid来获取点,以便我们可以创建一个网格。

x = np.cos(u)*np.sin(v)
y = np.sin(u)*np.sin(v)
z = np.cos(v)

这只不过是球体的参数方程。

ax1.plot_wireframe(x, y, z, rstride=5, cstride=5, linewidth=1)

最后使用plot_wireframe()函数绘制曲线,rstridecstride参数可用于设置网格密集的程度。

若有疑问,欢迎联系作者(微信:lixu1770105)。