Seite 1 von 1

Verschiebung des Graphen ähnlich Oszilloskop

Verfasst: Mittwoch 8. Juli 2020, 17:00
von Nick94
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.

Re: Verschiebung des Graphen ähnlich Oszilloskop

Verfasst: Donnerstag 9. Juli 2020, 10:23
von DeaD_EyE
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.

Re: Verschiebung des Graphen ähnlich Oszilloskop

Verfasst: Freitag 10. Juli 2020, 14:17
von Nick94
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...

Re: Verschiebung des Graphen ähnlich Oszilloskop

Verfasst: Dienstag 14. Juli 2020, 13:28
von Nick94
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.