在PyQt5上使用Matplotlib的绘图

讨论 我不是赌鬼
Lv5 宗师级炼丹师
发布在 Matplotlib   581   0
讨论 我不是赌鬼   581   0

    没时间了,先上效果图,再上代码,最后解析。

    效果图
    import sys
    
    from PyQt5.QtWidgets import QApplication, QWidget ,QGridLayout
    
    #导入matplotlib并使用QT5的底层渲染
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    #导入图形模块
    from matplotlib.figure import Figure
    
    class AddMatplotlibToPyqt5():
    
        def __init__(self):
            app = QApplication(sys.argv)
    
            #创建一个网格布局的pyqt5窗口
            self.creat_pyqt5_window()
            #创建一个可以载入pyqt5的matplotlib画布
            canvas = self.creat_figure_widget()
            #将画布加入窗口的布局中去
            self.layout.addWidget(canvas)
            #显示窗口
            self.window.show()
    
            sys.exit(app.exec_())
    
        def creat_pyqt5_window(self):
            self.window = QWidget()
            self.layout = QGridLayout()
            self.window.setLayout(self.layout)
    
        def creat_figure_widget(self):
            # 创建空白图形
            fig = Figure()
            # 创建空白子图(只含笛卡尔坐标系)
            subplot1 = fig.add_subplot(111)
            # 在子图subplot1中绘制折线图
            subplot1.plot([1, 2, 3], [3, 2, 1])
            # 将图框使用FigureCanvas封装,使其可以被pyqt5使用
            canvas = FigureCanvas(fig)
    
            return canvas
    
    AddMatplotlibToPyqt5()

    pyqt5部分不做详解,只是创建了一个窗口,并且设定窗口为网格布局,最后将经过处理的matplotlib图形作为一个普通的控件放入布局中。要理解程序,就必须要明确Figure,subplot,plot以及canvas的概念。

    首先是figure,指的是整个图形(黑框包围部分),可以通过add_subplot创建很多个subplot(译为“子图”,可以简单地理解为创建了一个笛卡尔坐标系),下图为包含两个子图的figure,而plot就是在一个子图中画折线图。

    包含两个子图的图形

    接着是最重要的canvas

    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

    matplotlib中,frontend就是我们写的python代码,而backend就是负责显示图形的底层代码。在matplotlib.backends中我们可以根据自己的平台而选用不同的底层代码,PyQt5的底层代码是QT5,所以我们需要qt5agg。而FigureCanvasQTAgg(figure)的作用是将图形渲染到画布,使图形可以在PyQt5上显示。

    最后,将画布加入到网格中即可。

    版权声明:作者保留权利,不代表意本站立场。如需转载请联系本站以及作者。

    参与讨论

    回复《 在PyQt5上使用Matplotlib的绘图

    EditorJs 编辑器

    沙发,很寂寞~
    反馈
    to-top--btn