figurecanvas python matplotlib pyqt4

python - figurecanvas - Cómo incrustar matplotlib en pyqt-para Dummies



matplotlib pyqt5 (2)

A continuación se muestra una adaptación del código anterior para usar bajo PyQt5 y Matplotlib 2.0 . Hay una serie de pequeños cambios: estructura de los submódulos PyQt, otro submódulo de matplotlib, método obsoleto ha sido reemplazado ...

import sys from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar import matplotlib.pyplot as plt import random class Window(QDialog): def __init__(self, parent=None): super(Window, self).__init__(parent) # a figure instance to plot on self.figure = plt.figure() # this is the Canvas Widget that displays the `figure` # it takes the `figure` instance as a parameter to __init__ self.canvas = FigureCanvas(self.figure) # this is the Navigation widget # it takes the Canvas widget and a parent self.toolbar = NavigationToolbar(self.canvas, self) # Just some button connected to `plot` method self.button = QPushButton(''Plot'') self.button.clicked.connect(self.plot) # set the layout layout = QVBoxLayout() layout.addWidget(self.toolbar) layout.addWidget(self.canvas) layout.addWidget(self.button) self.setLayout(layout) def plot(self): '''''' plot some random stuff '''''' # random data data = [random.random() for i in range(10)] # instead of ax.hold(False) self.figure.clear() # create an axis ax = self.figure.add_subplot(111) # discards the old graph # ax.hold(False) # deprecated, see above # plot data ax.plot(data, ''*-'') # refresh canvas self.canvas.draw() if __name__ == ''__main__'': app = QApplication(sys.argv) main = Window() main.show() sys.exit(app.exec_())

Actualmente estoy intentando insertar un gráfico que quiero trazar en una interfaz de usuario pyqt4 que diseñé. Como soy casi completamente nuevo en la programación, no entiendo cómo se incrustó la gente en los ejemplos que encontré, este (en la parte inferior) y ese .

Sería increíble si alguien pudiera publicar una explicación paso a paso o al menos un código muy pequeño y muy simple que solo crea, por ejemplo, un gráfico y un botón en una GUI de pyqt4.


No es tan complicado en realidad. Los widgets de Qt relevantes están en matplotlib.backends.backend_qt4agg . FigureCanvasQTAgg y NavigationToolbar2QT suelen ser lo que necesitas. Estos son widgets regulares de Qt. Tú los tratas como cualquier otro artilugio. A continuación se muestra un ejemplo muy simple con una Figure , Navigation y un solo botón que dibuja algunos datos aleatorios. He agregado comentarios para explicar las cosas.

import sys from PyQt4 import QtGui from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure import random class Window(QtGui.QDialog): def __init__(self, parent=None): super(Window, self).__init__(parent) # a figure instance to plot on self.figure = Figure() # this is the Canvas Widget that displays the `figure` # it takes the `figure` instance as a parameter to __init__ self.canvas = FigureCanvas(self.figure) # this is the Navigation widget # it takes the Canvas widget and a parent self.toolbar = NavigationToolbar(self.canvas, self) # Just some button connected to `plot` method 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 '''''' # random data data = [random.random() for i in range(10)] # create an axis ax = self.figure.add_subplot(111) # discards the old graph ax.clear() # plot data ax.plot(data, ''*-'') # refresh canvas self.canvas.draw() if __name__ == ''__main__'': app = QtGui.QApplication(sys.argv) main = Window() main.show() sys.exit(app.exec_())

Editar :

Actualizado para reflejar comentarios y cambios de API.

  • NavigationToolbar2QTAgg cambiado con NavigationToolbar2QT
  • pyplot directamente Figure lugar de pyplot
  • Reemplace ax.hold(False) obsoleto ax.hold(False) con ax.clear()