Matplot: FuncAnimation mit mehreren Linien

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Modibo
User
Beiträge: 22
Registriert: Samstag 19. Februar 2011, 16:06

Hallo zusammen,

ich versuche ein Programm zu schreiben, dass die Messdaten, die von einem Microcontroller an den Rechner geschickt werden, live darzustellen.

Dazu habe ich die Funktion FuncAnmation aus der Matplot-Bibliothek gefunden, mit der das eig. sehr schön funktionieren sollte. Leider ist die Dokumentation dazu nur sehr kurz, sodass ich die Funktion nicht richtig verstehe und die Beispiele im Internet nicht an meine eigene Anwendung anpassen kann.

Mein bisheriger Code sieht dazu so aus:
Das Problem ist hier, dass Datenwerte y1, y2 nicht ergänzt werden, sondern anscheinend ständig neu die leeren y1,y2 verwendet werden.

Code: Alles auswählen

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

a1 = raw_input("Verbindung konfigurieren(j/n)?:")
if (a1=="n\n"):
    port = raw_input("Bitte geben Sie die Verbindungsbezeichnunng (z.B.: '/dev/ttyUSB0') ein.\n")
    baudrate = int(input("Bitte geben Sie die Baudrate der Verbindung an.\n"))
else:
    port = "COM4"
    baudrate=115200

def add(liste, wert, n):
    liste = np.roll(liste, -1)
    liste[n-1]=wert
    return liste

s = serial.Serial(port,baudrate)
n = 10
y1 = np.zeros(n)
y2 = np.zeros(n)
t = np.arange(n)

fig = plt.figure()
ax = plt.axes()
ax.set_ylim(-70, 70)
a0, = ax.plot([], [])
a1, = ax.plot([], [])


def update(frameNum, a0, a1,y1,y2, n):
    print "z"
    j = s.readline().rstrip()
    k = format(j)
    l = k.split("\t")
    y1 = add(y1, l[1], n)
    y2 = add(y2, l[2], n)
    a0.set_data(range(len(y1)), y1)
    a1.set_data(range(len(y2)), y2)
    print y1, a0
    return a0, 
        
    
ani = animation.FuncAnimation(fig, update, fargs=(a0,a1,y1,y2, n), interval=100, frames=200)
plt.show()
Könnt Ihr mir verraten, wie ich meinen Code richtig anpasse, dass er auch funktioniert oder mir ein bisschen genauer erklären, wie FuncAnimation funktioniert?
Insebsonndere:
  • Wann brauche ich eine init-Funktion?
    Was genau passiert mit den Parametern in fargs?
    Und was muss ich in update zurückgeben, damit alle meine Linien aktualisiert werden?
Freundlichst,
Modibo
Antworten