2012-06-05 9 views
6

Ich bin neu in matplotlib. Ich habe eine Liste von x-y-Koordinaten, die ich in Python aktualisiere und die ich mit dem Pyplot von matplotlib animieren möchte. Ich möchte vorab den x-Bereich und den y-Bereich angeben. Im Folgenden finden Sie meine aktuellen Code:einfache Animation von 2D-Koordinaten unter Verwendung matplotlib und pyplot

import matplotlib.pyplot as plt 
x=[1,2,3,4] 
y=[5,6,7,8] 
for t in range(100): 
    #lists x and y get updated here 
    #... 
plt.plot(x, y, marker='o', linestyle='None') 
plt.show() 

Wie Sie sehen können, verwende ich plt.plot() und plt.show()am Ende meiner Iterationsschleife nur die endgültigen Koordinaten zu zeichnen. Aber ich will diesen Schritt innerhalb die Schleife und Handlung bei jeder Iteration mit einer vorgegebenen Pausenzeit setzen, so dass ich eine Animation habe, wie die Schleife läuft.

bewegen Gerade diese Aussage in der Schleife oder zwickt Drumherum nicht arbeiten. ich möchte es halten sehr einfach aber, und wollen nicht matplotlib.animation verwenden. Gibt es eine einfache Methode, ohne viele weiteren Module und Bibliotheken (nur Sachen wie plt.pause() und vielleicht nur ein bisschen mehr), die ich tun lassen, was ich will?

Ich habe viele Orte online angeschaut, und das Problem, das ich mit den meisten Methoden habe, ist, dass ich Python (x, y) (das ist Python Version 2.7) unter Windows dafür verwendet und Animationen mit zu komplizierten Modulen und Bibliotheken stürzen hier ab.

Allerdings kann ich einfache Sachen wie this example auf der Matplotlib-Seite laufen, die nahe ist, was ich will, aber nicht ganz. Das Beste ist vielleicht eine Modifikation dieses Beispiels, die für meinen Fall von 2D-Daten funktioniert (das Beispiel ist für eine 1D-Reihe). Aber jeder andere Vorschlag ist willkommen.

Antwort

8

Dies wird von den animation demo angepasst:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 

x = [1, 2, 3, 4] 
y = [5, 6, 7, 8] 

for t in range(10): 
    if t == 0: 
     points, = ax.plot(x, y, marker='o', linestyle='None') 
     ax.set_xlim(0, 10) 
     ax.set_ylim(0, 10) 
    else: 
     new_x = np.random.randint(10, size=5) 
     new_y = np.random.randint(10, size=5) 
     points.set_data(new_x, new_y) 
    plt.pause(0.5) 

Während dies einfach ist der docstring sagt, dass es langsam ist.

+0

+1. Das funktioniert. Ich werde einfach versuchen, es in mein endgültiges Programm zu integrieren und zu sehen, wie das geht. –

+0

Das hat mit meinem Programm super funktioniert. Akzeptiert. Und danke! –

+0

Es kann bequem sein, 'ax.clear()' zu verwenden; dann können Sie einfach eine neue Figur zeichnen, und Sie müssen nicht zwischen ersten und späteren Läufen unterscheiden. Außerdem verursachte 'plt.pause()' einen Fehler für mich, stattdessen benutzte ich 'fig.canvas.start_event_loop()'. – Scipio

Verwandte Themen