Frage zu Matplotlib

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krol
User
Beiträge: 3
Registriert: Freitag 24. August 2012, 09:59

Hallo,

ich benutze Python für die Auswertung von Messdaten und möchte diese dynamisch anzeigen lassen. Jetzt hab ich mir dazu matplotlib bzw. animation angeschaut. Das Problem dabei ist das die Daten schneller kommen wie das sie gezeichnet werden. Jetzt wollte ich fragen ob es möglich ist in einen bestehenden Graphen einfach einen weiteren einzufügen.

Z.b. ich zeichne erst eine gerade linie von 0-1, und eine Sekunde später eine weitere Linie von 1-2

Sprich das er nicht über die einzelnen Werte iteriert sondern den kompletten Graphen einfügt.

Gruß
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Krol hat geschrieben:Das Problem dabei ist das die Daten schneller kommen wie das sie gezeichnet werden. Jetzt wollte ich fragen ob es möglich ist in einen bestehenden Graphen einfach einen weiteren einzufügen.
Dem kann ich irgendwie nicht ganz folgen. Die Daten kommen zuschnell und dann soll ein weiterer Graph helfen?

Zeig mal wie du es genau machst. ich hatte mich vor Kurzem mit dem gleichen Thema beschäftige. Habe das Problem, aber nur quick and dirty gelöst. Es friert halt sehr schnell ein wenn man irgendwas klickt, aber für mich war das erstmal so okay. Man muss sich wohl mit einem GUI Toolkit behelfen um das Problem zu beheben.

Habe es so gemacht, läuft bei mir mit etwa 25FPS

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from collections import deque
from random import randint

from matplotlib import pylab

pylab.ion()

class MatplotlibGraph(object):
    def __init__(self, scale=0.1, min_value=0, max_value=1):
        self.x = pylab.arange(0, 10, scale)
        self.data = deque([0 for _ in xrange(len(self.x))])
        self.data[0] = min_value
        self.data[1] = max_value
        self.line, = pylab.plot(self.x, self.data)
        
    def add_data(self, value):
        self.data.append(value)
        self.data.popleft()
        self.line.set_ydata(self.data)
        pylab.draw()

plot = MatplotlibGraph(0.1, -1000, 1000)
for i in xrange(1000):
    plot.add_data(randint(-i,i))
Krol
User
Beiträge: 3
Registriert: Freitag 24. August 2012, 09:59

Habs im Grunde genommen auch so gemacht, nur das ich bei mir noch die Grenzen der x-Achse verschiebe.

Sag mal, hast du auch das Problem das man nachdem die Daten geplottet wurden den Graphen nicht mehr anklicken kann? Bei dem Beispiel von dir geht das ja auch nicht.
Krol
User
Beiträge: 3
Registriert: Freitag 24. August 2012, 09:59

Ok, liegt wohl an IDLE...
Antworten