在python中绘制3d矢量(数组)

时间:2014-04-17 07:47:26

标签: python numpy multidimensional-array matplotlib plot

使用numpy Packet i生成的向量(数组)包含蛋白质中几个原子的x,y,z坐标。我想绘制这些载体。

有人知道怎么做吗? 由于我无法绘制数组本身,因此我尝试使用循环绘制原子的坐标,如下所示:

from matplotlib import pyplot as pot
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
for i in range(3):
   plt.plot(atom1[i],atom2[i])

在这种情况下,我收到以下错误消息:TypeError:类型为' float'的对象没有len()

我感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

发生此错误是因为plt.plot(x, y)期望xy是列表或数组,当您给它一个浮点数时,它有一个长度。您可以通过将[atom1[i]]括在方括号中使其成为列表来避免这种情况。

然而,通常最好避免这种情况,因为目前尚不清楚发生了什么。不是循环遍历每个原子,而是将它们全部粘在一起形成一个数组,然后绘制数组的列。您甚至可以在创建原子时找到它们,您可以首先在数组中创建它们。例如:

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

# Define several atoms, these are numpy arrays of length 3
# randomly pulled from a uniform distribution between -1 and 1

atom1 = np.random.uniform(-1, 1, 3)
atom2 = np.random.uniform(-1, 1, 3)
atom3 = np.random.uniform(-1, 1, 3)
atom4 = np.random.uniform(-1, 1, 3)

# Define a list of colors to plot atoms

colors = ['r', 'g', 'b', 'k']

# Here all the atoms are stacked into a (4, 3) array
atoms = np.vstack([atom1, atom2, atom3, atom4])

ax = plt.subplot(111, projection='3d')

# Plot scatter of points
ax.scatter3D(atoms[:, 0], atoms[:, 1], atoms[:, 2], c=colors)

plt.show()

我添加了颜色,因为它有助于查看哪个原子是哪个。