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.
Verschiebung des Graphen ähnlich Oszilloskop
- 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.
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.
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]
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
Hallo,
habe es jetz hinbekommen, den Graphen mit den Pfeiltasten auf der X-Achse zu verschieben.
Vllt. ist es ja noch für andere interessant.
Falls jemand verbesserungs Vorschläge hat, nehme ich die gerne an.
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()
Falls jemand verbesserungs Vorschläge hat, nehme ich die gerne an.