Matplotlib: стрелки в каждой вершине пути - PullRequest
2 голосов
/ 11 июля 2020

Я пытаюсь построить путь, пройденный некоторой функцией ввода (чьи вершины записаны в массив 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()

Выходная ссылка

1 Ответ

1 голос
/ 11 июля 2020

matplotlib.patches.Arrow можно использовать для рисования стрелок. L oop необходимо посетить каждую вершину и ее преемника. Аналогичный подход можно использовать с 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()

итоговый сюжет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...