Matplotlib 3D箭头图绘制时,线条颜色正确但箭头颜色错误

4

我正在尝试绘制带有三个箭头的箭羽图,分别指向 x、y 和 z 方向,箭头颜色为绿色、红色和蓝色。但不知何故,箭头的线条颜色正确,但箭头部分的颜色错误,我不确定如何解决。以下是我的代码:

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

fig = plt.figure()
ax = fig.gca(projection='3d')
cols = ['r', 'g', 'b']

quivers = ax.quiver([0,0,0],[0,0,0],[0,0,0],[1,0,0],[0,1,0],[0,0,1], colors=cols)

ax.set_xlim3d([-2.0, 2.0])
ax.set_xlabel('X')

ax.set_ylim3d([-2.0, 2.0])
ax.set_ylabel('Y')

ax.set_zlim3d([-2, 2])
ax.set_zlabel('Z')
plt.show()

Quiver plot


你只有3支箭,为什么要列出6个箭袋? - mkrieger1
1
你有看过这个链接吗?https://dev59.com/1V4c5IYBdhLWcg3wAWPv#43414969? 它讨论了如何给Matplotlib中的3D箭头图添加颜色。 - ombk
这对我来说看起来像是一个错误。 - tmdavison
2
quiver 中,如果将颜色列表指定为选项 colors=..,则颜色循环会对所有线段生效,包括箭头的所有部分。 - swatchai
1个回答

1
quiver 中,如果指定了颜色列表作为选项 colors=..,则颜色循环会影响所有线段,包括箭头的所有部分。
要获得三个不同颜色的箭头,可以使用三个不同颜色的 quiver 语句。 方法1
ax.quiver([0],[0],[0],[1],[0],[0], colors='r')
ax.quiver([0],[0],[0],[0],[1],[0], colors='g')
ax.quiver([0],[0],[0],[0],[0],[1], colors='b')

方法2

fr = [(0,0,0), (0,0,0), (0,0,0)]
to = [(1,0,0), (0,1,0), (0,0,1)]
cr = ["red", "green", "blue"]
for (from_, to_, colr_) in zip(fr,to,cr):
    ax.quiver(*from_, *to_, colors=colr_)

1
谢谢,我通过使用cols = ['r', 'g', 'b', 'r', 'r', 'g', 'g', 'b', 'b']成功解决了我的问题(假设只有三条线被绘制时,现在颜色可以正确循环)。 - Tom McLean
1
@TomMcLean 不错的尝试。请查看我的更新答案。 - swatchai
谢谢,这是一个更好的方式! - Tom McLean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接