返回

用 Python Matplotlib 绘制 3D 图像:柱状图、曲面图、散点图和曲线图大全

后端

绘制 3D 柱状图

使用 Matplotlib 绘制 3D 柱状图既简单又直接。要创建 3D 柱状图,我们使用 axes3d.bar() 方法。与传统柱状图略有不同,axes3d.bar() 方法需要我们指定数据点的 xyz 坐标。

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

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 定义数据点
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.array([7, 8, 9])

# 绘制 3D 柱状图
ax.bar(x, y, z, width=0.5)

# 设置图表标题和标签
ax.set_title("3D 柱状图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()

绘制 3D 曲面图

3D 曲面图可用于可视化三维函数或数据分布。Matplotlib 提供了 Axes3D.plot_surface() 方法来创建这些图表。此方法需要我们提供定义曲面的函数或数据网格。

使用函数绘制曲面图

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

# 定义函数
def func(x, y):
    return np.sin(x) + np.cos(y)

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 设置 X 和 Y 坐标范围
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)

# 生成 X 和 Y 网格
X, Y = np.meshgrid(x, y)

# 计算 Z 值
Z = func(X, Y)

# 绘制曲面图
ax.plot_surface(X, Y, Z, cmap='rainbow')

# 设置图表标题和标签
ax.set_title("3D 曲面图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()

使用数据网格绘制曲面图

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

# 加载数据网格
data = np.loadtxt("data.txt", delimiter=",")

# 分离 X、Y 和 Z 数据
x = data[:, 0]
y = data[:, 1]
z = data[:, 2]

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 绘制曲面图
ax.plot_surface(x, y, z, cmap='rainbow')

# 设置图表标题和标签
ax.set_title("3D 曲面图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()

绘制 3D 散点图

3D 散点图用于可视化三维空间中的数据点。Matplotlib 的 Axes3D.scatter() 方法可用于创建这些图表。此方法需要我们提供数据点的 xyz 坐标。

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

# 定义数据点
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 绘制 3D 散点图
ax.scatter(x, y, z, c='b', marker='o')

# 设置图表标题和标签
ax.set_title("3D 散点图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()

绘制 3D 曲线图

3D 曲线图用于可视化三维空间中的函数或数据序列。Matplotlib 的 Axes3D.plot() 方法可用于创建这些图表。此方法需要我们提供函数或数据的 xyz 坐标。

使用函数绘制曲线图

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

# 定义函数
def func(x):
    return np.sin(x)

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 设置 X 坐标范围
x = np.linspace(0, 2 * np.pi, 100)

# 计算 Y 和 Z 值
y = func(x)
z = np.zeros(len(x))

# 绘制曲线图
ax.plot(x, y, z, c='r')

# 设置图表标题和标签
ax.set_title("3D 曲线图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()

使用数据序列绘制曲线图

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

# 加载数据序列
data = np.loadtxt("data.txt", delimiter=",")

# 分离 X、Y 和 Z 数据
x = data[:, 0]
y = data[:, 1]
z = data[:, 2]

# 创建一个 figure 和 3D 子图
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

# 绘制曲线图
ax.plot(x, y, z, c='g')

# 设置图表标题和标签
ax.set_title("3D 曲线图")
ax.set_xlabel("X 轴")
ax.set_ylabel("Y 轴")
ax.set_zlabel("Z 轴")

# 显示图表
plt.show()