Matplotlib:在极轴上绘制任意向量

Matplotlib: plot arbitrary vectors on polar axes

以前有关于 matplotlib 中极轴上的箭袋图的问题,但它们涉及矢量场。我有兴趣在极轴上绘制任意向量。如果有正版,请link。

我正在编写一些与循环世界有关的软件。我正在绘制代理人从圆形竞技场中心到边缘的轨迹。这可以通过绘制从圆心到边缘的矢量来形象化。我正在尝试使用 matplotlib 的箭袋图在一组极轴上绘制矢量。这是一个最低限度的工作示例:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='polar')

    # Plot origin (agent's start point)
    ax.plot(0, 0, color='black', marker='o', markersize=5)

    # Plot agent's path
    ax.quiver((0, 0), (0, 1), color='black')

    # Example of where (0, 1) should be
    ax.plot(0, 1, color='black', marker='o', markersize=5)

    # Plot configuration
    ax.set_rticks([])
    ax.set_rmin(0)
    ax.set_rmax(1)
    ax.set_thetalim(-np.pi, np.pi)
    ax.set_xticks(np.linspace(np.pi, -np.pi, 4, endpoint=False))
    ax.grid(False)
    ax.set_theta_direction(-1)
    ax.set_theta_zero_location("N")

    plt.show()

如果你运行代码,你会得到这个情节

该图显示了正确绘制的原点,一个示例点位于 (0, 1) 以显示矢量应该在哪里结束,然后矢量本身看起来太短(尽管方向是正确的)。从 docs,我了解到 quiver 采用笛卡尔坐标 (x,y) 表示向量的起点,(u,v) 表示向量的方向。在我之前使用 quiver (u,v) 的经验中,本质上表示向量的尖端所在的位置,因此在这种情况下,我们希望向量从 (0,0) 绘制到 (0,1),这不是这样的,我也不知道为什么。

简而言之,我希望能够在一组极轴上绘制任意向量,但 quiver 没有按我的预期工作。三问:

  1. 考虑到我的目标,我的代码是否真的合理?我想从极坐标图的原点到边缘绘制一个单位向量。

  2. 我是不是完全误解了如何使用quiver

  3. 如何在matplotlib中的极轴上绘制任意向量?我知道 arrow,虽然最初的尝试没有成功,但我会尝试一下。

没有使用标准图,只是在其中定义我自己的极地系统,我完全被难住了。

您没有在 ax.quiver(x,y,u,v) 中指定 uv。为确保箭头的长度为 1 个单位,您还需要设置比例和单位。

ax.quiver(0,0,0,1, color='black', angles="xy", scale_units='xy', scale=1.)