Matplotlib 绘制 3D 图形
在数据可视化领域,Matplotlib 是一个强大且灵活的库,提供了丰富的绘图功能,在数据分析和学术研究中被广泛使用。其中,Matplotlib 的 3D 绘图功能能够让我们更好地展示三维数据,帮助我们更直观地理解数据之间的关系。本文将介绍如何使用 Matplotlib 绘制 3D 图形,包括绘制散点图、曲面图、等高线图等。
一、创建 3D 图形
1. 创建 3D 图形对象
在绘制 3D 图形之前,首先需要创建一个 3D 图形对象。这可以通过 Axes3D
类中的 add_subplot
方法来实现。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
2. 定义数据
接下来,我们需要定义需要绘制的数据。这里我们以一个简单的例子来说明,生成一组随机的三维数据。
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
3. 绘制 3D 散点图
使用 scatter
方法可以绘制 3D 散点图。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
ax.scatter(x, y, z)
plt.show()
Output:
4. 绘制 3D 曲线图
通过 plot
方法可以绘制 3D 曲线图。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
ax.plot(x, y, z)
plt.show()
Output:
二、绘制 3D 曲面图
1. 生成网格数据
首先,我们需要生成网格数据,以便绘制曲面图。这里以生成二维网格数据为例。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
Z = np.sin(np.sqrt(X**2 + Y**2))
2. 绘制 3D 曲面图
使用 plot_surface
方法可以绘制 3D 曲面图。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
plt.show()
Output:
三、绘制 3D 等高线图
1. 生成等高线数据
同样,我们需要生成等高线数据,以便绘制 3D 等高线图。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(X, Y, Z)
plt.show()
Output:
2. 绘制 3D 等高线图
使用 contourf
方法可以绘制 3D 填充等高线图。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contourf(X, Y, Z)
plt.show()
Output:
四、调整 3D 图形样式
1. 更改点的颜色和大小
可以通过 c
参数指定点的颜色,通过 s
参数指定点的大小。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
ax.scatter(x, y, z, c='r', s=100)
plt.show()
Output:
2. 添加图例
使用 legend
方法可以添加图例。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
ax.scatter(x, y, z, label='data')
ax.legend()
plt.show()
Output:
3. 添加坐标轴标签
使用 set_xlabel
、set_ylabel
和 set_zlabel
方法可以添加坐标轴标签。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Output:
五、保存 3D 图形
可以使用 savefig
方法将 3D 图形保存为图片。
plt.savefig('3d_plot.png')
通过以上示例,我们学习了如何使用 Matplotlib 绘制 3D 图形,包括散点图、曲面图和等高线图等。Matplotlib 提供了丰富的功能和灵活的参数设置,可以满足各种不同的绘图需求。