1 mpl_toolkits.mplot3d
功能介绍
mpl_toolkits.mplot3d
是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d
的主要功能和功能简介:
- 3D 散点图:通过
scatter
函数,你可以绘制三维散点图,用于显示三维数据点的分布和关系。 - 3D 曲面图:使用
plot_surface
函数,可以创建三维曲面图,用于可视化三维数据的表面形状。这对于显示函数的三维性质非常有用。 - 3D 线图:
plot
函数允许你绘制三维线图,用于表示数据点之间的连接关系。这对于显示数据随时间或其他变量的变化趋势非常有用。 - 3D 条形图:通过
bar3d
函数,你可以创建三维柱状图,用于比较不同类别或组的数据。 - 3D 散点图标记和颜色:你可以根据数据的特性来定制散点图的标记形状和颜色,以区分不同的数据点。
- 3D 坐标轴定制:你可以设置和定制三维图的坐标轴,包括添加标签、设置刻度和范围等。
- 图形样式定制:你可以设置图形的样式,包括标题、图例、背景色、线条样式和颜色等,以使图形更具吸引力和可读性。
- 3D 投影:
mpl_toolkits.mplot3d
支持不同类型的三维投影,包括透视投影和正交投影,以满足不同的可视化需求。 - 动画和交互性:你可以在三维图中添加动画效果或交互式元素,以更好地探索数据。
- 多图形组合:你可以在同一个三维图中组合多个不同类型的图形,以展示多个数据系列。
- 保存图形:最后,你可以将绘制的三维图形保存为图像文件,以便在文档中使用或与他人分享。
- 总之,mpl_toolkits.mplot3d 子模块为 Matplotlib 提供了强大的三维可视化工具,可以用于可视化和分析三维数据。根据你的需求,你可以选择不同的图形类型和样式来呈现数据,以便更好地理解和传达你的发现。
在 Matplotlib 的 mpl_toolkits.mplot3d 模块中,绘制 3D 图的一般流程包括以下步骤:
(1)导入必要的库和模块:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D
(2)创建一个 3D 图形的绘图对象:
fig = plt.figure()
(3) 创建一个 3D 子图:
ax = fig.add_subplot(111, projection='3d')
(4) 准备数据:定义 X、Y 和 Z 数据,这些数据将在 3D 图中表示。
- 使用相应的 3D 绘图函数来绘制数据,例如:
- 散点图:ax.scatter(x, y, z, c='color', marker='marker_style', label='label')
- 曲面图:ax.plot_surface(X, Y, Z, cmap='colormap')
- 线图:
ax.plot(x, y, z, label='label')
- 柱状图:ax.bar3d(x, y, z, dx, dy, dz, shade=True)
(5)添加坐标轴标签:
ax.set_xlabel('X轴标签') ax.set_ylabel('Y轴标签') ax.set_zlabel('Z轴标签')
(6)添加标题:
plt.title('3D 图标题')
(7)添加图例(如果需要):
ax.legend()
(8)显示图形:
plt.show()
2 绘制3D散点图
在matplotlib的mpl_toolkits.mplot3d模块中,你可以使用`scatter`函数绘制多种类型的3D散点图。
下面是一些常见的3D散点图类型:
2.1 绘制单色散点图
所有的散点都使用相同的颜色。可以通过设置`c`参数指定颜色。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.random.rand(100) y = np.random.rand(100) z = np.random.rand(100) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制单色散点图 ax.scatter(x, y, z, c='blue') # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
2.2 绘制彩色散点图
不同的散点可以使用不同的颜色。可以通过设置`c`参数为一个具有相同长度的数组来指定每个散点的颜色。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.random.rand(100) y = np.random.rand(100) z = np.random.rand(100) colors = np.random.rand(100) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制彩色散点图 ax.scatter(x, y, z, c=colors) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
2.3 绘制大小变化散点图
散点的大小可以根据某个特征进行变化。可以通过设置`s`参数为一个具有相同长度的数组来指定每个散点的大小。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.random.rand(100) # x坐标 y = np.random.rand(100) # y坐标 z = np.random.rand(100) # z坐标 colors = np.random.rand(100) # 散点颜色 sizes = np.random.randint(low=50, high=200, size=100) # 散点大小 # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制散点图 ax.scatter(x, y, z, c=colors, s=sizes, alpha=0.8) # 设置坐标轴标签 ax.set_xlabel('X') # 设置x轴标签 ax.set_ylabel('Y') # 设置y轴标签 ax.set_zlabel('Z') # 设置z轴标签 # 显示图形 plt.show()
2.4 绘制形状变化散点图
散点的形状可以根据某个特征进行变化。可以通过设置`marker`参数来指定散点的形状。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.random.rand(100) y = np.random.rand(100) z = np.random.rand(100) markers = ['o', 's', '^', 'D'] # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制形状变化散点图 for i in range(len(x)): ax.scatter(x[i], y[i], z[i], marker=markers[i%len(markers)]) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
3 绘制3D线图
使用mpl_toolkits.mplot3d模块中的Axes3D对象绘制3D线图。
3.1 简单线图
使用`plot`函数绘制简单的曲线。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.linspace(0, 1, 100) y = np.sin(2 * np.pi * x) z = np.cos(2 * np.pi * x) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制简单线图 ax.plot(x, y, z) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
3.2 绘制多线图
使用`plot`函数绘制多条线并在同一图表中显示。
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 创建示例数据 t = np.linspace(0, 20, 100) # 时间或X轴数据 x1 = np.sin(t) y1 = np.cos(t) z1 = t x2 = np.sin(t) + 2 y2 = np.cos(t) + 2 z2 = t # 创建图形和子图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制第一条线 ax.plot(x1, y1, z1, label='线1', color='blue', linestyle='-', linewidth=2) # 绘制第二条线 ax.plot(x2, y2, z2, label='线2', color='red', linestyle='--', linewidth=2) # 添加标题 plt.title('三维多线图示例') # 添加坐标轴标签 ax.set_xlabel('X轴') ax.set_ylabel('Y轴') ax.set_zlabel('Z轴') # 添加图例 ax.legend() # 显示图形 plt.show()
3.3 绘制带标记的线图
使用`plot`函数,并通过设置`marker`参数来添加线上的标记点。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.linspace(0, 1, 100) y = np.sin(2 * np.pi * x) z = np.cos(2 * np.pi * x) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制带标记的线图 ax.plot(x, y, z, marker='o') # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
3.4 绘制立体网格线图
使用`plot_wireframe`函数在3D空间中绘制网格线图。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X ** 2 + Y ** 2)) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制立体网格线图 ax.plot_wireframe(X, Y, Z) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
3.5 绘制等高线图
使用`contour`或`contourf`函数在3D空间中绘制等高线。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制3D等高线图 ax.contour3D(X, Y, Z, 50, cmap='viridis') # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
4 绘制3D条形图
在matplotlib中,由于 mpl_toolkits.mplot3d
模块的限制,没有直接绘制3D的条形图的函数。不过你可以使用 bar3d
函数绘制类似的3D条形图效果。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 x = [1, 2, 3, 4, 5] # x轴坐标位置 y = [1, 2, 3, 4, 5] # y轴坐标位置 z = [0, 3, 2, 5, 1] # z轴高度,即条形的高度 dx = dy = 0.8 # x和y方向的宽度 dz = z # 条形的高度 colors = ['red', 'green', 'blue', 'orange', 'purple'] # 颜色列表,一一对应于每个条形 # 创建图形和轴 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制3D条形图,并设置每个条形的颜色 for xi, yi, zi, color in zip(x, y, z, colors): ax.bar3d(xi, yi, 0, dx, dy, zi, color=color) # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()