Anima le frecce in matplotlib
Ho animato una riga in matploltib, l'output del codice si presenta così:
Ma quello che voglio è che invece di questa riga il codice dovrebbe tracciare una freccia (cioè una punta di freccia alla fine della riga), ecco lo snippet di codice:
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()
Cosa devo aggiungere / modificare nel codice in modo da poter ottenere una freccia invece della riga nell'output?
Risposte
Risposta
Puoi usare ax.arrowper tracciare la freccia.
Nota che dovresti cancellare il grafico con ax.cla()e regolare i limiti degli assi con ax.set()ogni iterazione.
Codice
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()
Animazione
Forse dai un'occhiata qui
Potresti semplicemente cambiare la funzione linea in funzione freccia. Ma nota che dovresti prima calcolare il punto finale della freccia, poiché secondo i documenti, puoi solo specificare la lunghezza dx, dy. Utilizzando Pitagora, il punto di partenza sarebbe x[0], y[0]e dx, dyè il punto finale tradotto.
Penso che tu possa risolverlo ora da solo.