Verschiebung des Graphen ähnlich Oszilloskop

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Nick94
User
Beiträge: 10
Registriert: Dienstag 16. Juni 2020, 14:14

Hallo zusammen,

ich bin gerade dabei, ein Tool zu entwerfen, welches csv Dateien einlesen kann und diese automatsich plottet.
Das klappt auch alles soweit.

Die dargestellte Kurve soll aber auch auf der X und Y Achse verschoben werden können, am besten mit der Maus/Tastatur, damit das Tool ähnlich einem Oszilloskop bedient werden kann.
Zoomen mit dem Mausrad klappt bereits.
Bisher habe ich aber noch nichts dazu gefunden, wie ich die Kurve verschieben kann, ohne die NavigationToolbar zu verwenden. Ich würde die Kurve gerne mit den Pfeiltasten der Tastur auf der X und Y Achse verschieben.

Hat da vllt. jemand eine Idee und kann mir helfen?
Danke.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1206
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wenn x und y sich nicht ändern, also keine neuen Daten hinzukommen, kann man einfach eine Art Fensterfunktion programmieren.

Code: Alles auswählen

class Window:
    def __init__(self, size, x, y):
        if len(x) != len(y):
            raise ValueError("x and y must have the same length.")
        if size > len(x):
            raise ValueError("size must be smaller then x and y.")
        self.size = size
        self.x = x
        self.y = y
    def get(self, idx):
        if idx < 0:
            raise ValueError("Only positive index is allowed.")
        if idx + self.size > len(self.x):
            idx = len(self.x) - self.size
        area = slice(idx, idx + self.size)
        return self.x[area], self.y[area]
Falls neue Daten zur Laufzeit des Programms dazukommen, kannst du z.B. collections.deque nutzen. Wenn du die maximale Größe angibst (maxlen), verwirft deque alte Elemente.
Wenn du ein neues Element zum Ende hinzufügst und die Maximalgröße erreicht ist, wird das erste Element verworfen.
Wenn du ein neues Element zum Anfang hinzufügst und die Maximalgröße erreicht ist, wird das letzte Element verworfen.

Falls man in der Zeit zurückgehen will, muss man die deque größer machen und dann eine Fensterfunktion auf deque anwenden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Nick94
User
Beiträge: 10
Registriert: Dienstag 16. Juni 2020, 14:14

Danke für die Antwort DeaD_EyE.
Kannst du mir das mit der Fensterfunktion vllt. nochmal was genauer erklären?

Ich hab das leider noch nicht ganz verstanden...
Nick94
User
Beiträge: 10
Registriert: Dienstag 16. Juni 2020, 14:14

Hallo,

habe es jetz hinbekommen, den Graphen mit den Pfeiltasten auf der X-Achse zu verschieben.

Code: Alles auswählen

def on_press(key):
    pos_min, pos_max = ax1.get_xlim()
    if(key == Key.right):
        ax1.set_xlim([pos_min+1,pos_max+1])
        fig.canvas.draw_idle()
    if(key == Key.left):
        ax1.set_xlim([pos_min-1,pos_max-1])
        fig.canvas.draw_idle()
Vllt. ist es ja noch für andere interessant.
Falls jemand verbesserungs Vorschläge hat, nehme ich die gerne an.
Antworten