返回
用 Python Matplotlib 绘制 3D 图像:柱状图、曲面图、散点图和曲线图大全
后端
2023-12-19 12:13:43
绘制 3D 柱状图
使用 Matplotlib 绘制 3D 柱状图既简单又直接。要创建 3D 柱状图,我们使用 axes3d.bar()
方法。与传统柱状图略有不同,axes3d.bar()
方法需要我们指定数据点的 x
、y
和 z
坐标。
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()
方法可用于创建这些图表。此方法需要我们提供数据点的 x
、y
和 z
坐标。
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()
方法可用于创建这些图表。此方法需要我们提供函数或数据的 x
、y
和 z
坐标。
使用函数绘制曲线图
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()