【问题标题】:plotting 3d vectors (arrays) in python在 python 中绘制 3d 向量(数组)
【发布时间】:2014-06-01 09:19:48
【问题描述】:

使用 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: object of type 'float' has no len()

感谢您的帮助:)

【问题讨论】:

    标签: python numpy multidimensional-array matplotlib plot


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的详细解答。这很有帮助,但我还需要知道我是否可以在原子之间绘制矢量。即,例如,我想绘制从 atom1 到 atom2 的向量。
    • 不要使用scatter,而是使用ax.plot(atoms[:, 0], atoms[:, 1], atoms[:, 2])。这在原子中的每个点之间画了一条线。您必须决定如何分割它,例如atoms[0:1, 0] 给出前两个原子的 x 坐标。
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 2021-02-02
    • 1970-01-01
    • 2021-05-05
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多