在python中绘制三维矢量(数组)



使用numpy数据包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()

我感谢您的帮助:)

发生此错误的原因是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()

我添加了颜色,因为这有助于了解哪个原子是哪个。

相关内容

  • 没有找到相关文章

最新更新