如何在 matplotlib 中制作 3D 散点图

Posted

技术标签:

【中文标题】如何在 matplotlib 中制作 3D 散点图【英文标题】:How to make a 3D scatter plot in matplotlib 【发布时间】:2010-12-31 10:44:33 【问题描述】:

我目前有一个 nx3 矩阵数组。我想将三列绘制为三个轴。 我怎样才能做到这一点?

我用谷歌搜索过,有人建议使用 Matlab,但我真的很难理解它。我还需要它是一个散点图。

有人可以教我吗?

【问题讨论】:

您是在寻找应用程序来绘制情节,还是想编写代码(以任何语言)来绘制情节? 使用渐近线 - 它是免费的、功能强大的,而且质量很棒! 如果你有一个数组,我假设你有一个程序并且这个数组是它的一部分。请让我们有机会通过说明它是哪种程序(语言)来帮助您! 我仍然会使用 asymptote(作为库),或者只是为其生成输入文件。看看它惊人的输出质量! 如果它是一个n by 3 数组,您将得到一个 3 维曲线图。对于“3-d 图”,您需要一个 n x m x l 数组。你想要一条曲线,任何一个元组(x,y,z) 代表曲线上的一个点吗? 【参考方案1】:

您可以为此使用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()

上面的代码生成如下图:

【讨论】:

不错的解决方案。请注意,plt.zlabel('zlabel') 不起作用。要标记您需要使用的 z 轴:ax.set_zlabel('Z'). 而不是 from matplotlib.pyplot 它应该是 import matplotlib.pyplot @roktim 好地方。以前的编辑在格式化帖子时犯了这个错误,我现在已经更正了。【参考方案2】:

使用以下对我有用的代码:

# 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 是我的 3-D 数组,而对于 X_vals、Y_vals、Z_vals,我从该数组复制/使用 1 列/轴并分别分配给这些变量/数组。

【讨论】:

【参考方案3】:
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
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 notebook

【讨论】:

以上是关于如何在 matplotlib 中制作 3D 散点图的主要内容,如果未能解决你的问题,请参考以下文章

带有颜色渐变的 Matplotlib 3D 散点图

使用 Python Matplotlib 在 3D 轴上为振动传感器读数创建动画散点图

从 Python 的 pandas 中的数据帧制作 matplotlib 散点图

Matplotlib实例教程(十五) 3D散点图

Matplotlib实例教程(十五) 3D散点图

使用matplotlib将3D散点图动画为gif最终为空