2017-02-04 1 views
0

Gibt es eine Möglichkeit, ein Diagramm in Matplotlib zu animieren, ohne auf die integrierten Animationsfunktionen zurückgreifen zu müssen? Ich empfinde es als äußerst umständlich, sie zu verwenden und fühle, dass es viel einfacher wäre, einen Punkt zu zeichnen, den Graphen zu löschen und dann den nächsten Punkt zu zeichnen.Animieren mit Matplotlib ohne Animationsfunktion

Ich sehe etwas wie:

def f(): 
    # do stuff here 
    return x, y, t 

wo jeder t einen anderen Rahmen wäre.

Ich meine, ich habe Sachen wie mit plt.clf(), plt.close() usw. versucht, aber nichts scheint zu funktionieren.

Antwort

2

Es ist sicher möglich, ohne FuncAnimation zu animieren. Der Zweck der "enivisioned Funktion" ist jedoch nicht wirklich klar. In einer Animation ist die Zeit die unabhängige Variable, d. H. Für jeden Zeitschritt erzeugen Sie einige neue Daten zum Plotten oder ähnlichem. Daher würde die Funktion t als Eingabe nehmen und einige Daten zurückgeben.

import matplotlib.pyplot as plt 
import numpy as np 

def f(t): 
    x=np.random.rand(1) 
    y=np.random.rand(1) 
    return x,y 

fig, ax = plt.subplots() 
ax.set_xlim(0,1) 
ax.set_ylim(0,1) 
for t in range(100): 
    x,y = f(t) 
    # optionally clear axes and reset limits 
    #plt.gca().cla() 
    #ax.set_xlim(0,1) 
    #ax.set_ylim(0,1) 
    ax.plot(x, y, marker="s") 
    ax.set_title(str(t)) 
    fig.canvas.draw() 
    plt.pause(0.1) 

plt.show() 

Auch ist es nicht klar, warum Sie FuncAnimation vermeiden möchte. Die gleiche Animation kann wie oben mit FuncAnimation wie folgt hergestellt werden:

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

def f(t): 
    x=np.random.rand(1) 
    y=np.random.rand(1) 
    return x,y 

fig, ax = plt.subplots() 
ax.set_xlim(0,1) 
ax.set_ylim(0,1) 

def update(t): 
    x,y = f(t) 
    # optionally clear axes and reset limits 
    #plt.gca().cla() 
    #ax.set_xlim(0,1) 
    #ax.set_ylim(0,1) 
    ax.plot(x, y, marker="s") 
    ax.set_title(str(t)) 

ani = matplotlib.animation.FuncAnimation(fig, update, frames=100) 
plt.show() 

Es gibt nicht viel geändert, Sie haben die gleiche Anzahl von Zeilen, nichts wirklich peinlich, hier zu sehen.
Plus Sie haben alle Vorteile von FuncAnimation, wenn die Animation komplexer wird, wenn Sie die Animation wiederholen möchten, wenn Sie Blitting verwenden möchten, oder wenn Sie es in eine Datei exportieren möchten.

Verwandte Themen