如何在Python中制作3D散点图?


91

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

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

有人可以教我吗?


1
您是在寻找绘制图的应用程序,还是想编写绘制图的代码(使用任何语言)?
Nils Pipenbrinck,2009年

使用渐近线-它是免费的,功能强大的,而且质量超赞!
Hamish Grubijan 09年

1
如果您有一个数组,则假定您有一个程序,并且此数组是其中的一部分。请给我们一个机会,通过指出它是哪种程序(语言)来帮助您!
卡尔·斯莫特里奇

我仍将使用渐近线(作为lib),或仅为其生成输入文件。看看它惊人的输出质量!
Hamish Grubijan 2009年

2
如果它是一个n乘以3的数组,则将获得3维的曲线图。对于“ 3维图”,您将需要一个n x m x l数组。您是否想要一条曲线,其中有任何一个元组(x,y,z)代表曲线上的一个点?
Alok Singhal,2009年

Answers:


160

您可以为此使用matplotlib。matplotlib有一个mplot3d模块,它将完全满足您的要求。

from matplotlib import pyplot
from mpl_toolkits.mplot3d import Axes3D
import random


fig = pyplot.figure()
ax = Axes3D(fig)

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)
pyplot.show()

上面的代码生成如下图:

matplotlib 3D图像


11
不错的解决方案。请注意,将plt.zlabel('zlabel')无法正常工作。要标记z轴,您需要使用:ax.set_zlabel('Z')
Yonatan Simson's

8

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

# 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列/轴,并分别分配给了这些变量/数组。


1

请使用渐近线!

看起来像这样:

http://asymptote.sourceforge.net/gallery/3D%20graphs/helix.pdf

这是代码:http : //asymptote.sourceforge.net/gallery/3D%20graphs/helix.asy

渐近线还可以读取数据文件。

完整的画廊:http : //asymptote.sourceforge.net/gallery/

要在Python中使用渐近线:

http://www.tex.ac.uk/tex-archive/graphics/asymptote/base/asymptote.py


1
恐怕此答案中的大多数链接现在都已失效=(
alkanen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.