|
| 1 | +import sys |
| 2 | +import matplotlib |
| 3 | + |
| 4 | +matplotlib.use('Qt5Agg') |
| 5 | + |
| 6 | +from PyQt5 import QtWidgets |
| 7 | + |
| 8 | +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar |
| 9 | +from matplotlib.figure import Figure |
| 10 | + |
| 11 | + |
| 12 | +# 在PyQt5中显示matplotlib,它的原理就是使用FigureCanvasQTAgg作为后端(backend),将plot渲染成简单的bitmap图片 |
| 13 | +class MplCanvas(FigureCanvasQTAgg): |
| 14 | + |
| 15 | + def __init__(self, parent=None, width=5, height=4, dpi=100): |
| 16 | + # figsize尺寸,dpi指定绘图分辨率 |
| 17 | + fig = Figure(figsize=(width, height), dpi=dpi) |
| 18 | + |
| 19 | + # add_subplot的参数是ijn的形式,代表3个数,其中ij是行列数,n是第n个图,比如(111)则是一个有1个图,该图位于第1个 |
| 20 | + self.axes = fig.add_subplot(111) |
| 21 | + super(MplCanvas, self).__init__(fig) |
| 22 | + |
| 23 | + |
| 24 | +class MainWindow(QtWidgets.QMainWindow): |
| 25 | + |
| 26 | + def __init__(self, *args, **kwargs): |
| 27 | + super(MainWindow, self).__init__(*args, **kwargs) |
| 28 | + self.setWindowTitle('matplotlib with pyqt5') |
| 29 | + |
| 30 | + sc = MplCanvas(self, width=5, height=4, dpi=200) |
| 31 | + # x轴、y轴的数据 |
| 32 | + sc.axes.plot([0, 1, 2, 3, 4, 5, 6], [1, 10, 20, 4, 50, 16, 20]) |
| 33 | + |
| 34 | + # 创建toolbar,2个参数分别是canvas对象和当前窗口对象 |
| 35 | + toolbar = NavigationToolbar(sc, self) |
| 36 | + |
| 37 | + # 放到垂直布局里 |
| 38 | + layout = QtWidgets.QVBoxLayout() |
| 39 | + layout.addWidget(toolbar) |
| 40 | + layout.addWidget(sc) |
| 41 | + |
| 42 | + # 设置整个窗口布局并显示 |
| 43 | + widget = QtWidgets.QWidget() |
| 44 | + widget.setLayout(layout) |
| 45 | + self.setCentralWidget(widget) |
| 46 | + self.show() |
| 47 | + |
| 48 | + |
| 49 | +if __name__ == '__main__': |
| 50 | + app = QtWidgets.QApplication(sys.argv) |
| 51 | + windows = MainWindow() |
| 52 | + windows.show() |
| 53 | + sys.exit(app.exec_()) |
0 commit comments