Animuj strzały w matplotlib
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
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
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.