Anima le frecce in matplotlib

Sep 16 2020

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

3 Konqui Sep 16 2020 at 08:10

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

V.Hunon Sep 16 2020 at 06:41

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.