小言_互联网的博客

PyQt5—Matplotlib 的使用

331人阅读  评论(0)

PyQt5—Matplotlib

一、Matplotlib

1、简介 Matplotlib

  • Matplotlib 是 Python 中一个经常用到的绘图模块,提供了一整套与 Matlab 相似的命令 API,适合交互式绘图,也很方便嵌入到 GUI 程序中。

2、Matplotlib 与 PyQt5 结合的简单应用

  • 示例代码如下:
    # -*- coding:utf-8 -*-
    # Time : 2019/10/04 下午 2:54 
    # Author : 御承扬
    # e-mail:2923616405@qq.com
    # project:  PyQt5
    # File : MatplotlibWidget.py 
    # @software: PyCharm
    
    
    import sys
    import random
    import matplotlib
    from PyQt5 import QtCore
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from numpy import *
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
    from matplotlib.figure import Figure
    import matplotlib.pyplot as plt
    
    
    class MyMplCanvas(FigureCanvas):
        def __init__(self, parent=None, width=5, height=4, dpi=100):
            plt.rcParams['font.family'] = ['SimHei']
            plt.rcParams['axes.unicode_minus'] = False
            self.fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = self.fig.add_subplot(111)
            # self.axes.hold(False)
            FigureCanvas.__init__(self, self.fig)
            self.setParent(parent)
            FigureCanvas.setSizePolicy(
                self,
                QSizePolicy.Expanding,
                QSizePolicy.Expanding
            )
            FigureCanvas.updateGeometry(self)
    
        def start_static_plot(self):
            self.fig.suptitle('测试静态图')
            t = arange(0.0, 3.0, 0.01)
            s = sin(2 * pi * t)
            self.axes.plot(t, s)
            self.axes.set_ylabel('静态图:Y 轴')
            self.axes.set_xlabel('静态图:X 轴')
            self.axes.grid(True)
    
        def start_dynamic_plot(self, *args, **kwargs):
            timer = QtCore.QTimer(self)
            timer.timeout.connect(self.update_figure)
            timer.start(1000)
    
        def update_figure(self):
            self.fig.suptitle('测试动态图')
            l = [random.randint(0, 10) for i in range(4)]
            self.axes.plot([0, 1, 2, 3], l, 'r')
            self.axes.set_ylabel('动态图:Y 轴')
            self.axes.set_xlabel('动态图:X 轴')
            self.axes.grid(True)
            self.draw()
    
    
    class MatplotlibWidget(QWidget):
        def __init__(self, parent=None):
            super(MatplotlibWidget, self).__init__(parent)
            self.setWindowIcon(QIcon("./images/Python2.ico"))
            self.setWindowTitle("Matplotlib of PyQt5")
            self.layout = QVBoxLayout(self)
            self.mpl = MyMplCanvas(self, width=5, height=4, dpi=100)
            self.mpl_ntb = NavigationToolbar(self.mpl, self)
            self.layout.addWidget(self.mpl)
            self.layout.addWidget(self.mpl_ntb)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ui = MatplotlibWidget()
        # ui.mpl.start_static_plot()
        ui.mpl.start_dynamic_plot()
        ui.show()
        sys.exit(app.exec_())
    

转载:https://blog.csdn.net/qq_42896653/article/details/102077976
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场