2017-03-13 5 views
0

Ich bin auf der Suche nach einem einfachen Timed Animation Beispiel für Matplotlib. Ich habe mehrere Referenzen auf das Subplot-Beispiel in der Matplotlib-Bibliothek gefunden, aber ich muss etwas viel Grundlegenderes sehen, um meinen Code zu modellieren.matplotlib einfache zeitgesteuerte Animation Beispiel

Ich habe 10 diskrete Werte auf der X-Achse und einen kontinuierlichen Wert auf der Y-Achse (Think Histogramm). Die Beziehungen zwischen x und y ändern sich über 500 Zeitschritte.

Hier ist eine lächerlich verkürzte Version eines Datensatzes mit nur 5 Kategorien und 5 Zeitschritte:

x = list(range(0, 5)) 
y = [[2.00000000e-01, 2.00000000e-01, 2.75495888e-02, 
    1.40100625e-02, 2.00000000e-01], [1.40100625e-02, 
    3.85989938e-01, 6.20454173e-03, 1.74945474e-03, 
    2.00000000e-01], [1.74945474e-03, 3.98250545e-01, 
    1.24956950e-03, 2.30229281e-04, 2.00000000e-01], 
    [2.30229281e-04, 3.99769771e-01, 2.26476892e-04, 
    3.05018276e-05, 2.00000000e-01], [3.05018276e-05, 
    3.99969498e-01, 3.82455658e-05, 4.04459287e-06, 
    2.00000000e-01]] 

Wie würde man solch einen Datensatz in matplotlib animieren?

+0

Hier sind zwei sehr einfache Beispiele für Animationen: http://stackoverflow.com/questions/42722691/python-matplotlib-update-scatter-plot-from-a-function – ImportanceOfBeingErnest

+0

Thanks @ IoBE, ich dachte, ich möchte eine einfache Demonstration von TimedAnimation, aber ist es deine Empfehlung, jede Figur durch eine for-Schleife neu zu zeichnen und überhaupt keine Animation zu verwenden? Ich brauche keine Interaktion. – zazizoma

+0

In meiner Antwort auf die verknüpfte Frage gibt es zwei Lösungen. Ich empfehle nichts, da ich keine Informationen darüber habe, was Sie tun möchten. – ImportanceOfBeingErnest

Antwort

1

Hier ist das Beispiel von this question 's Antwort, mit den Daten von oben.

enter image description here

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

x = list(range(0, 5)) 
y = [[2.00000000e-01, 2.00000000e-01, 2.75495888e-02, 
    1.40100625e-02, 2.00000000e-01], [1.40100625e-02, 
    3.85989938e-01, 6.20454173e-03, 1.74945474e-03, 
    2.00000000e-01], [1.74945474e-03, 3.98250545e-01, 
    1.24956950e-03, 2.30229281e-04, 2.00000000e-01], 
    [2.30229281e-04, 3.99769771e-01, 2.26476892e-04, 
    3.05018276e-05, 2.00000000e-01], [3.05018276e-05, 
    3.99969498e-01, 3.82455658e-05, 4.04459287e-06, 
    2.00000000e-01]] 

fig, ax = plt.subplots() 

sc = ax.scatter(x,y[0]) 
plt.ylim(-0.1,0.5) 

def animate(i): 
    sc.set_offsets(np.c_[x,y[i]]) 

ani = matplotlib.animation.FuncAnimation(fig, animate, 
       frames=len(y), interval=300, repeat=True) 

plt.show() 
+0

Super, danke, also brauche ich TimedAnimation überhaupt nicht. Daher erzeugt der Befehl set_offsets die mehreren Plots und die FuncAnimation steuert die Schleifen durch i, Timing und Wiederholungen. Was wäre, wenn es 100 Zeitschritte gäbe? Ändern Sie 'frames = len (x)' in 'frames = len (y)'? – zazizoma

+0

['FuncAnimation' ** ist ** ein' TimedAnimation'] (https://github.com/matplotlib/matplotlib/blob/f697e8cde48f54ddaef3e0172df25c8bc46bbed6/lib/matplotlib/ananimation.py#L1406). Ja, richtig, 'len (x)' muss 'len (y)' sein - das hat nur funktioniert, weil beide in diesem Beispiel gleich sind. – ImportanceOfBeingErnest

+0

Ich frage mich wirklich, wie Menschen schreiben können * "Super, danke" * unter einer Antwort, akzeptieren Sie es, und schließlich ** nicht ** (http://stackoverflow.com/help/someone-answers) es. – ImportanceOfBeingErnest