Animuj strzały w matplotlib

Sep 16 2020

Animowałem linię w matploltib, wyjście kodu wygląda następująco:

Ale to, czego chcę, to zamiast tej linii kod powinien narysować strzałkę (tj. Grot strzałki na końcu linii), oto fragment kodu:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(12, 8))
ax.set(xlim=(0, 104), ylim=(0, 68))

x_start, y_start = (50, 35)
x_end, y_end = (90, 45)

x = np.linspace(x_start, x_end, 50)
y = np.linspace(y_start, y_end, 50)

line, = ax.plot(x, y)

def animate(i):
    line.set_data(x[:i], y[:i])
    return line,


ani = animation.FuncAnimation(
    fig, animate, interval=20, blit=True, save_count=50)


plt.show()

Co powinienem dodać / zmienić w kodzie, aby uzyskać strzałkę zamiast linii w wyniku?

Odpowiedzi

3 Konqui Sep 16 2020 at 08:10

Odpowiedź

Możesz użyć ax.arrowdo wykreślenia strzałki.
Zauważ, że powinieneś wyczyścić wykres za pomocą ax.cla()i dopasować limity osi ax.set()przy każdej iteracji.

Kod

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(12, 8))
ax.set(xlim=(0, 104), ylim=(0, 68))

x_start, y_start = (50, 35)
x_end, y_end = (90, 45)

N = 50
x = np.linspace(x_start, x_end, N)
y = np.linspace(y_start, y_end, N)

def animate(i):
    ax.cla()
    ax.arrow(x_start, y_start,
             x[i] - x_start, y[i] - y_start,
             head_width = 2, head_length = 2, fc = 'black', ec = 'black')
    ax.set(xlim = (0, 104), ylim = (0, 68))

ani = animation.FuncAnimation(fig, animate, interval=20, frames=N, blit=False, save_count=50)

plt.show()

Animacja

V.Hunon Sep 16 2020 at 06:41

Może zajrzyj tutaj

Możesz po prostu zmienić funkcję liniową na funkcję strzałkową. Ale pamiętaj, że najpierw musisz obliczyć punkt końcowy strzałki, ponieważ zgodnie z dokumentacją możesz określić tylko długość dx, dy. Za pomocą Pitagorasa punktem wyjścia byłoby x[0], y[0]i dx, dyjest tłumaczone końcowym.

Myślę, że możesz teraz rozwiązać ten problem samodzielnie.