Python 柱面坐标中单位向量的打印堆栈-matplotlib

Python 柱面坐标中单位向量的打印堆栈-matplotlib,python,3d,matplotlib,Python,3d,Matplotlib,我有一个python程序,可以为我计算角度并将它们输出到列表中 我想做的是绘制一组箭头,它们是指向角度方向的单位向量。所以我认为圆柱坐标最好,因为它们只有一个角坐标 我试过pyplot.quiver,但我认为它在3D中不能做任何事情,而且3D线图也不起作用 有没有一种方法可以不费力地将每个(长度、高度、角度)转换为一对向量(a、b、c),(长度*cos(角度)、长度*sin(角度)、高度)?如果您有一个角度列表,您可以使用numpy轻松计算与这些角度相关联的向量 import numpy as

我有一个python程序,可以为我计算角度并将它们输出到列表中

我想做的是绘制一组箭头,它们是指向角度方向的单位向量。所以我认为圆柱坐标最好,因为它们只有一个角坐标

我试过pyplot.quiver,但我认为它在3D中不能做任何事情,而且3D线图也不起作用


有没有一种方法可以不费力地将每个(长度、高度、角度)转换为一对向量(a、b、c),(长度*cos(角度)、长度*sin(角度)、高度)?

如果您有一个角度列表,您可以使用numpy轻松计算与这些角度相关联的向量

import numpy as np
import matplotlib.pyplot as plt
angles = np.random.rand(100)

length = 1.
vectors_2d = np.vstack((length * np.cos(angles), length * np.sin(angles))).T

for x, y in vectors_2d:
    plt.plot([0, x], [0, y])
plt.show()


如果你真的希望它是圆柱形而不是极坐标,那么

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
angles = np.random.rand(100)

length = 1.
heights = np.arange(len(angles))
vectors_3d = np.vstack((length * np.cos(angles), 
                        length * np.sin(angles), 
                        heights)).T

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for x, y, z in vectors_3d:
    ax.plot([0, x], [0, y], zs=[z, z])
plt.show()


编辑:我知道如何使用
pyplot.quiver将箭头放在绘图上。然而,我认为
mplot3d
不能很好地处理
quiver
。也许像@tcaswell这样的人可以帮助解决这个问题。但在2D中,您可以这样做

import numpy as np
import matplotlib.pyplot as plt

angles = np.random.rand(100)
# Define coords for arrow tails (the origin)
x0, y0 = np.zeros(100), np.zeros(100)
# Define coords for arrow tips (cos/sin)
x, y = np.cos(angles), np.sin(angles)

# in case you want colored arrows
colors = 'bgrcmyk'
colors *= colors * (len(x0) / len(colors) + 1)
plt.quiver(x0, y0, x, y, color=colors[:len(x0)], scale=1) #scale sets the length
plt.show()

太好了,谢谢。你知道如何在行尾添加箭头吗?