【问题标题】:Vary length of arrows in Matplotlib Axes3D.quiver plot改变 Matplotlib Axes3D.quiver 图中箭头的长度
【发布时间】:2015-05-13 21:17:06
【问题描述】:

有没有办法改变箭袋图中各个箭头的长度?

我使用以下方法创建了一个情节:

lines_to_draw = list of numpy 3d vectors
xs, ys, zs    = list of coordinates
us, vs, ws    = list of displacements

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for line in lines_to_draw:
    ax.plot(line[:,0], line[:,1], line[:,2], color='green'
ax.quiver(xs, ys, zs, us, vs, ws)

看起来像这样(轴已关闭):

问题是所有箭头看起来都是相同的大小。文档表明可能是这种情况(特别是 length 参数):

Axes3D.quiver(*args, **kwargs) 绘制一个 3D 箭头场。

调用签名:

quiver(X, Y, Z, U, V, W, **kwargs) 参数:

X、Y、Z:箭头位置的x、y、z坐标

U、V、W:箭头指向的方向向量参数可以是 类数组或标量,只要它们可以一起广播。 参数也可以是掩码数组。如果任何一个元素 参数被屏蔽,则相应的 quiver 元素将不会 绘制。

关键字参数:

长度:[1.0 | float] 每个箭袋的长度,默认为 1.0, 单位与坐标轴相同

箭头长度比:[0.3 |浮动] 箭头相对于箭袋的比率,默认为 0.3 任意 额外的关键字参数被委托给 LineCollection

为了澄清起见,向量的大小最多相差 30 倍。所以应该有一个非常明显的差异。

【问题讨论】:

  • 使用长度参数时会发生什么?
  • 它平等地缩放所有箭头,抱歉,应该提到这一点。我在 Github 上对matplotlib 进行了更多研究,我很确定它会规范化每个(u_i, v_i, w_i)^T 向量。
  • 你是对的。您可以按长度类别和quiver 分别拆分数据。虽然,看看这个,这对数据显示有用吗?读者不会混淆短箭头和几乎垂直于图像平面的箭头吗?也许是颜色变化?
  • 我也应该指定我的用例。这些不会用于渲染单个图像。它用于可视化分子的正常模式,并且总是通过旋转图像来完成,以便我们可以考虑投影。我正在向 matplotlib 提交 PR,因为维护者认为向量不应该被规范化。

标签: python matplotlib


【解决方案1】:

这将在下一个主要的 MPL 版本中实现,请参阅此pull request

Hack:您可以在系统上编辑相应的 MPL 文件,请参阅this 答案。

或者:为每个箭头发出单独的 ax.quiver 命令,并带有单独的 length 属性。这不是很有效,但在某些情况下这可能已经有所帮助。

【讨论】:

  • 太好了。我实际上是提出所引用问题的人,但被转移了方向,实际上并没有制作和提交 PR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多