Matplotlib:路径中每个顶点的箭头

时间:2020-07-11 15:22:51

标签: python matplotlib path

我正在尝试绘制某些输入函数所用的路径(其顶点记录在numpy数组中)

我想为“→→→→”形式的每个顶点添加一个箭头(任何方向标记)以跟踪路径的方向。

我知道FancyArrowPatch会在终端顶点上仅添加一个箭头,形式为:“ ————>”。那就是我想要的。 [出于超出此问题范围的原因]

当前,我的代码如下:注意,我们无法猜测方向。

def plot_track(self, verts: np.array) -> None:
    '''Plot followed track: verts is 2D array: x, y'''
    track = Path(verts)
    patch = PathPatch(path=track, edgecolor="#FF0000",
                      fill=False)
    self.axs.add_patch(patch)
    self.fig.canvas.draw()
    self.root.mainloop()

Output-link

1 个答案:

答案 0 :(得分:1)

matplotlib.patches.Arrow可用于绘制箭头。循环需要访问每个顶点及其后继对象。 FancyArrowPatch可以使用类似的方法。

import matplotlib.pyplot as plt
from matplotlib.patches import Arrow
import numpy as np

import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch, Path, Arrow
import numpy as np

def plot_track(verts, ax, **kw_args):
    '''Plot followed track: verts is 2D array: x, y'''
    for xy0, xy1 in zip(verts[:-1], verts[1:]):
        patch = Arrow(*xy0, *(xy1 - xy0), **kw_args)
        ax.add_patch(patch)
    ax.relim()
    ax.autoscale_view()

fig, ax = plt.subplots()
t = np.arange(2, 11, 1)
x = t * np.sin(t)
y = t * np.cos(t)
verts = np.vstack([x, y]).T

plot_track(verts - np.array([7, 0]), ax, color='red', fill=True, width=1)
plot_track(verts + np.array([7, 0]), ax, color='red', fill=False, width=1)
plt.show()

resulting plot