如何在 matplotlib 图中添加 3D 子图?

如何在 matplotlib 图中添加 3D 子图?

在数据可视化中,三维图形常常被用来展示高维数据。而 matplotlib 是 Python 中最流行的绘图库之一,它提供了很多绘制三维图形的工具,其中包括 mplot3d 模块。在 matplotlib 图中添加 3D 子图,可以让我们以一种更加直观的方式展示数据,并且能够更好地理解数据之间的关系。

了解 mplot3d 模块

在使用 mplot3d 模块前,首先需要 import 它:

from mpl_toolkits import mplot3d

# 也可以直接 import mplot3d:
# import mpl_toolkits.mplot3d as mplot3d

然后,我们需要创建一个包含 3D 子图的 Axes3D 对象。此外,我们还要用 figure 函数创建一个图形对象,并用 add_subplot 函数将 Axes3D 对象添加到图形上。最后,我们调用 plot 函数将绘图的数据添加到 Axes3D 对象上。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 折线图
x = np.random.rand(10)
y = np.random.rand(10)
z = np.random.rand(10)

ax.plot(x, y, z)

# 显示图形
plt.show()

运行上述代码,我们可以得到一个简单的 3D 折线图。

绘制 3D 散点图

绘制 3D 散点图可以使用 scatter 函数来实现。以下是一个示例代码:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 散点图
x = np.random.rand(10)
y = np.random.rand(10)
z = np.random.rand(10)

ax.scatter(x, y, z)

# 显示图形
plt.show()

上述代码会生成一个 3D 散点图。我们可以在 x、y、z 轴上放置数据点,使它们组成一个三维空间的图形。

绘制 3D 柱状图

bar 函数可以用于绘制三维柱状图。以下是一个示例代码:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 柱状图
x = np.arange(10)
y = np.arange(10)
z = np.zeros(10)

dx = 0.5 * np.ones(10)
dy = 0.5 * np.ones(10)
dz = np.random.rand(10)

ax.bar3d(x, y, z, dx, dy, dz)

# 显示图形
plt.show()

上述代码会生成一个随机高度的 3D 柱状图。我们可以看到在三维空间中有十个柱子。

绘制 3D 曲面图

plot_surface 函数可以用于绘制 3D 曲面图。以下是一个示例代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 曲面图
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

ax.plot_surface(X, Y, Z)

# 显示图形
plt.show()

上述代码会生成一个 sin 函数的 3D 曲面图。我们可以看到这个图形在三维空间中有许多起伏。

设置 3D 子图的角度和视角

我们可以用 view_init 函数调整 3D 子图的角度和视角。以下是一个示例代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 曲面图
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

ax.plot_surface(X, Y, Z)

# 设置视角和角度
ax.view_init(60, 35)

# 显示图形
plt.show()

上述代码会生成一个 sin 函数的 3D 曲面图,并且将视角调整为距离原点较远的位置,从而更好地观察曲面的形状。

添加坐标轴标签和标题

我们可以用 set_xlabelset_ylabelset_zlabel 函数分别为 x、y 和 z 轴添加标签,用 set_title 函数添加图形标题。以下是一个示例代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 曲面图
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

ax.plot_surface(X, Y, Z)

# 添加 x、y、z 标签和标题
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot')

# 显示图形
plt.show()

上述代码会生成一个包含 x、y、z 标签和标题的 3D 曲面图。

结论

在 matplotlib 图中添加 3D 子图可以帮助我们更好地理解高维数据之间的关系。通过使用 mplot3d 模块和各种绘图函数,我们可以轻松地创建 3D 折线图、散点图、柱状图、曲面图等各种类型的图形。我们还可以使用 view_init 函数对角度和视角进行调整,使用 set_xlabelset_ylabelset_zlabelset_title 函数为图形添加标签和标题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程