用python绘制三维向量(数组)

用python绘制三维向量(数组),python,numpy,multidimensional-array,matplotlib,plot,Python,Numpy,Multidimensional Array,Matplotlib,Plot,使用numpy数据包,我生成的向量(数组)包含蛋白质中几个原子的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[

使用numpy数据包,我生成的向量(数组)包含蛋白质中几个原子的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:type'float'的对象没有len()


我非常感谢您的帮助:)

发生此错误是因为
plt.plot(x,y)
希望
x
y
是列表或数组,当您给它一个浮点数时,它们具有一定的长度。您可以通过将
[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()

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

非常感谢您的详细回答。这很有帮助,但我还需要知道我是否能在原子之间画向量。i、 例如,我想绘制从atom1到atom2的向量,而不是使用
scatter
只需使用
ax.plot(atoms[:,0],atoms[:,1],atoms[:,2])
。这在原子的每个点之间画了一条线。您必须决定如何分割它,例如
原子[0:1,0]
给出前两个原子的x坐标。