如何制作3D散点图

135 投票
4 回答
301519 浏览
提问于 2025-04-15 17:30

我现在有一个nx3的矩阵数组,想把这三列数据分别作为三个坐标轴来画图。请问我该怎么做呢?

我在网上查了一下,大家都建议用Matlab,但是我真的很难理解这个软件。我还需要把图画成散点图。

4 个回答

7
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')

散点图

zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata);

在这里输入图片描述

Colab 笔记本

16

可以使用下面的代码,这对我有效:

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

# Generate the values
x_vals = X_iso[:, 0:1]
y_vals = X_iso[:, 1:2]
z_vals = X_iso[:, 2:3]

# Plot the values
ax.scatter(x_vals, y_vals, z_vals, c = 'b', marker='o')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')

plt.show()

这里的 X_iso 是我的三维数组,而 X_vals、Y_vals 和 Z_vals 是我从这个数组中复制/提取的一列/一个轴,然后分别赋值给这些变量/数组。

224

你可以使用 matplotlib 来实现这个功能。matplotlib 有一个 mplot3d 模块,正好可以满足你的需求。

import matplotlib.pyplot as plt
import random

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

sequence_containing_x_vals = list(range(0, 100))
sequence_containing_y_vals = list(range(0, 100))
sequence_containing_z_vals = list(range(0, 100))

random.shuffle(sequence_containing_x_vals)
random.shuffle(sequence_containing_y_vals)
random.shuffle(sequence_containing_z_vals)

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals)
plt.show()

上面的代码会生成一个像这样的图:

这里插入图片描述

撰写回答