Dynamisches Aktualisieren eines Balkendiagramms in Matplotlib

8

Ich habe eine Reihe von Sensoren an meinem Raspberry Pi angeschlossen; Ich sende ihre Daten zweimal pro Sekunde mit TCP an meinen PC. Ich möchte diese Werte kontinuierlich mit matplotlib grafisch darstellen.

Die Methode, die ich gerade benutze, scheint ineffizient zu sein (ich lösche das Subplot und zeichne es jedes Mal neu) und hat einige unerwünschte Nachteile (die Skala wird jedes Mal neu eingestellt; ich möchte, dass sie von 0,0 - 5,0 bleibt). Ich weiß, dass es einen Weg gibt, dies zu tun, ohne dass man es abräumen und neu zeichnen muss, aber ich kann es nicht herausfinden. Das Folgende ist mein aktueller Code:

%Vor%     
hfaran 27.04.2013, 07:20
quelle

2 Antworten

16

Sie könnten animation.FuncAnimation verwenden. Zeichnen Sie das Balkendiagramm einmal und speichern Sie den Rückgabewert, der eine Sammlung von Rect: ist:

%Vor%

Um die Höhe eines Balkens zu ändern, rufen Sie rect.set_height :

auf %Vor% %Vor%     
unutbu 27.04.2013, 13:28
quelle
2

Wenn matplotlib keine erzwungene Option ist, würde ich ein auf dem Web-Socket basierendes Push-System auf dem Server und ein Javascript-basiertes Plotten für die Client-Seite empfehlen. Ich werde zuerst einige Vorteile aufzählen:

  1. Der Client (Ihr anderer PC) muss nur einen modernen Webbrowser installiert haben und kann jedes Betriebssystem ausführen und muss nicht Python, Matplotlib installiert haben
  2. Da WebSockets im Broadcast-Modus funktionieren, können Sie beliebig viele Clients den gleichen Feed verwenden. Dies kann sehr nützlich sein, während Benutzer eine Demo Ihres Systems erhalten können
  3. Der clientseitige Code ist ebenfalls effizient, er behält die letzten "x" -Werte und funktioniert gut in Echtzeit, so dass nicht alles neu gezeichnet werden muss

Da ich mit meinem Raspberry Pi etwas sehr ähnliches mache, kann ich meine Details teilen. Es wurde von diesem Blogpost inspiriert. Der Code für die Serverseite, der die Daten pusht, findet sich hier . Sie können wahrscheinlich sehen, dass es nach der Installation der Abhängigkeiten Ihrem Code sehr ähnlich ist und Sie schließlich socket.send() sogar in meinem Code finden würden. Für den Kunden ist dies der Link zu die HTML-Datei und das ist die JS, die bekommt ausgeführt auf dem Browser, der Flot Plotting-Bibliothek verwendet. Ich bin sicher, dass das Demo auf ihrer Homepage großartig genug ist, um bemerkt zu werden!

    
Nipun Batra 27.04.2013 08:11
quelle

Tags und Links