/ / Utilisation de matplotlib Widget Cursor dans un graphe incorporé dans une interface graphique - python, matplotlib, plot, pyqt

Utilisation du widget Cursor matplotlib dans la représentation graphique de l’interface graphique - python, matplotlib, plot, pyqt

J’ai une interface graphique PyQt4 qui contient un tracé matplotlib. Je souhaite ajouter un Cursor widget (un peu comme cet exemple, ce qui fonctionne pour moi) à l'intrigue. Pour une raison quelconque, le curseur ne s'affiche pas dans mon intrigue incorporée. Que se passe-t-il?

Vous trouverez ci-dessous un exemple (non) de travail minimum.

import sys
from PyQt4 import QtGui

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor

import random

class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)

plt.style.use("ggplot")
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)

self.toolbar = NavigationToolbar(self.canvas, self)
#self.toolbar.hide()

# Just some button
self.button = QtGui.QPushButton("Plot")
self.button.clicked.connect(self.plot)

# set the layout
layout = QtGui.QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
layout.addWidget(self.button)
self.setLayout(layout)

def plot(self):
""" plot some random stuff """
data = [random.random() for i in range(25)]
ax = self.figure.add_subplot(111)
ax.hold(False)
ax.plot(data, "*-")
Cursor(ax, lw = 2)
self.canvas.draw()

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)

main = Window()
main.setWindowTitle("Simple QTpy and MatplotLib example with Zoom/Pan")
main.show()

sys.exit(app.exec_())

Réponses:

2 pour la réponse № 1

Du matplotlib.widgets.Cursor Documentation:

Pour que le curseur reste réactif, vous devez conserver une référence.

Le moyen le plus simple de le faire est de l’affecter à une variable de classe, self.cursor=Cursor(..).

def plot(self):
""" plot some random stuff """
data = [random.random() for i in range(25)]
ax = self.figure.add_subplot(111)
#ax.hold(False)  <- don"t use ax.hold!
ax.plot(data, "*-")
self.cursor = Cursor(ax, lw = 2)
self.canvas.draw()