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
没有按我的预期工作。三问:
考虑到我的目标,我的代码是否真的合理?我想从极坐标图的原点到边缘绘制一个单位向量。
我是不是完全误解了如何使用quiver
?
如何在matplotlib中的极轴上绘制任意向量?我知道 arrow
,虽然最初的尝试没有成功,但我会尝试一下。
没有使用标准图,只是在其中定义我自己的极地系统,我完全被难住了。
您没有在 ax.quiver(x,y,u,v)
中指定 u
和 v
。为确保箭头的长度为 1 个单位,您还需要设置比例和单位。
ax.quiver(0,0,0,1, color='black', angles="xy", scale_units='xy', scale=1.)
以前有关于 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
没有按我的预期工作。三问:
考虑到我的目标,我的代码是否真的合理?我想从极坐标图的原点到边缘绘制一个单位向量。
我是不是完全误解了如何使用
quiver
?如何在matplotlib中的极轴上绘制任意向量?我知道
arrow
,虽然最初的尝试没有成功,但我会尝试一下。
没有使用标准图,只是在其中定义我自己的极地系统,我完全被难住了。
您没有在 ax.quiver(x,y,u,v)
中指定 u
和 v
。为确保箭头的长度为 1 个单位,您还需要设置比例和单位。
ax.quiver(0,0,0,1, color='black', angles="xy", scale_units='xy', scale=1.)