Gibt es eine Möglichkeit, die interaktiven Navigationseinstellungen einer Figur so beizubehalten, dass beim nächsten Aktualisieren der Figur die Zoom/Pan-Eigenschaften nicht auf die Standardwerte zurückgesetzt werden? Um genauer zu sein: Wenn ich eine Figur zoome, und dann die Grafik aktualisiere, ist es möglich, dass die neue Figur mit den gleichen Zoomeinstellungen wie die vorherige erscheint? Ich benutze Tkinter.Zoomeinstellungen in der interaktiven Navigation von Matplotlib beibehalten Abbildung
Antwort
Sie müssen das Bild aktualisieren, anstatt jedes Mal ein neues Bild zu erstellen. Als Beispiel:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class DummyPlot(object):
def __init__(self):
self.imsize = (10, 10)
self.data = np.random.random(self.imsize)
self.fig, self.ax = plt.subplots()
self.im = self.ax.imshow(self.data)
buttonax = self.fig.add_axes([0.45, 0.9, 0.1, 0.075])
self.button = Button(buttonax, 'Update')
self.button.on_clicked(self.update)
def update(self, event):
self.data += np.random.random(self.imsize) - 0.5
self.im.set_data(self.data)
self.im.set_clim([self.data.min(), self.data.max()])
self.fig.canvas.draw()
def show(self):
plt.show()
p = DummyPlot()
p.show()
Wenn Sie die Daten zum ersten Mal zeichnen möchten, wenn Sie „update“ treffen, ist ein Work-around ersten Dummy-Daten zu zeichnen und sie unsichtbar machen.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class DummyPlot(object):
def __init__(self):
self.imsize = (10, 10)
self.data = np.random.random(self.imsize)
self.fig, self.ax = plt.subplots()
dummy_data = np.zeros(self.imsize)
self.im = self.ax.imshow(dummy_data)
self.im.set_visible(False)
buttonax = self.fig.add_axes([0.45, 0.9, 0.1, 0.075])
self.button = Button(buttonax, 'Update')
self.button.on_clicked(self.update)
def update(self, event):
self.im.set_visible(True)
self.data += np.random.random(self.imsize) - 0.5
self.im.set_data(self.data)
self.im.set_clim([self.data.min(), self.data.max()])
self.fig.canvas.draw()
def show(self):
plt.show()
p = DummyPlot()
p.show()
Alternativ können Sie die automatische Skalierung deaktivieren und jedes Mal ein neues Bild erstellen. Dies wird jedoch deutlich langsamer sein.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class DummyPlot(object):
def __init__(self):
self.imsize = (10, 10)
self.fig, self.ax = plt.subplots()
self.ax.axis([-0.5, self.imsize[1] - 0.5,
self.imsize[0] - 0.5, -0.5])
self.ax.set_aspect(1.0)
self.ax.autoscale(False)
buttonax = self.fig.add_axes([0.45, 0.9, 0.1, 0.075])
self.button = Button(buttonax, 'Update')
self.button.on_clicked(self.update)
def update(self, event):
self.ax.imshow(np.random.random(self.imsize))
self.fig.canvas.draw()
def show(self):
plt.show()
p = DummyPlot()
p.show()
Danke, es ist viel klarer mit einem Beispiel. Mein Fehler ist wohl, dass ich den Graphen mit derselben Schaltfläche erstellen und aktualisieren möchte. Mit anderen Worten, wenn das Programm startet, sehe ich nicht die Grafik, die erscheint, wenn ich eine Taste drücke. Die gleiche Grafik wird nach erneutem Drücken der Taste mit neuen Daten (und manchmal neuen Achsenbeschriftungen) aktualisiert. – maupertius
In diesem Fall könnten Sie ein Bild mit Dummy-Daten erstellen oder jedes Mal ein neues Bild erstellen, aber die automatische Skalierung deaktivieren. Sehen Sie sich die beiden neuen Beispiele an. Ich hoffe, das hilft! –
Danke, das hilft wirklich! Ich denke, ich muss nur die Struktur meines Skripts ändern. Tatsächlich wird das Figurenfenster erstellt, wenn ich den Knopf drücke, den ich später verwenden möchte, um das Diagramm zu aktualisieren. In dem Fall, dass Sie mich vorgeschlagen haben, ist das Zahlenfenster bereits erstellt, bevor ich den Knopf drücke, und deshalb konnte ich 'set_data' nicht verwenden. Mit Ihrer Lösung wird das Plotten viel schneller, aber das Zahlenfenster muss schon da sein, wenn ich den Knopf – maupertius
- 1. Aufzählung in Matplotlib Abbildung
- 2. Hinzufügen der Maus Navigation zu IDD Abbildung
- 3. Abrufen von XY-Daten aus Matplotlib Abbildung
- 4. Marker auf Loglog Matplotlib Abbildung
- 5. Wie matplotlib Abbildung zu kopieren?
- 6. Matplotlib entfernen Patches aus Abbildung
- 7. Mehrere Abbildung Anordnung mit Matplotlib
- 8. Leere Unterplots in Matplotlib entfernen Abbildung
- 9. Matplotlib Abbildung ändert sich für die Veröffentlichung nach der Herstellung der Abbildung
- 10. IPython und Inline Matplotlib Abbildung Größen
- 11. Zeichnen Sie Pfeile auf Matplotlib Abbildung direkt
- 12. Importieren einer SVG-Datei a Matplotlib Abbildung
- 13. Anpassen von Gitternetzlinien auf einem 3D Matplotlib Abbildung
- 14. Aktualisieren Sie Subplots in Matplotlib Abbildung, die bereits geöffnet ist
- 15. Einbetten eines interaktiven Matplotlib-Plots in eine Webseite
- 16. Wie zu verhindern, dass Zahlen in exponentielle Form in Python geändert werden matplotlib Abbildung
- 17. Limit der Abbildung Dimensionen
- 18. mit interaktiven und nicht interaktiven Backends innerhalb eines Programms
- 19. Matplotlib Abbildung facecolor alpha während (Hintergrundfarbe, Transparenz) Speicher
- 20. Matplotlib Subplots Abbildung - Savegig() wird nicht PDF ausgeben. "NoneType" Fehler
- 21. Centering Floated Bilder in Abbildung
- 22. matplotlib: Wie man Schicht anhebt, klick auf Abbildung?
- 23. Wie wird der maximale Rekursionstiefehler beim interaktiven Zeichnen entfernt?
- 24. Wie zu schließen pandas.scatter_matrix() Abbildung
- 25. Ändern Abbildung Größe mit Nebenhandlungen
- 26. Bild nur von Abbildung als png in einer Schleife auf Matplotlib mit gleichen Dimensionen speichern
- 27. Move Legende außerhalb Abbildung in Seaborn tsplot
- 28. Wie programmgesteuert Schwenken/Zoomen in pyqt/matplotlib navigation
- 29. 3D-Plot mit Matplotlib: Achsen ausblenden, Achsenbezeichnungen aber beibehalten?
- 30. Achsenbeschriftung im Koordinatensystem der Abbildung anstelle der Achsen setzen
fand ich eine Methode namens 'get_navigate_mode()' aber ich habe keine Ahnung, wie ich es – maupertius
verwenden Wie werden Sie den Plot zu aktualisieren? Wenn Sie es richtig machen (z. B. 'line.set_data'), tut es genau das, was Sie wollen ... –
Mein Plot besteht aus einer Colormap, die ich mit' imshow() 'erstellt habe. Die Figur erscheint, wenn ich einen Knopf drücke. Für die Aktualisierung bedeute ich das Drücken derselben Taste erneut. – maupertius