前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python pyqt5 matplotlib绘图

python pyqt5 matplotlib绘图

作者头像
用户5760343
发布2019-07-27 20:34:20
2K0
发布2019-07-27 20:34:20
举报
文章被收录于专栏:sktjsktj

import sys import random import matplotlib

matplotlib.use("Qt5Agg") from PyQt5 import QtCore from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget from numpy import arange, sin, pi 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): """FigureCanvas的最终的父类其实是QWidget。"""

代码语言:javascript
复制
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)  # 新建一个figure
    self.axes = self.fig.add_subplot(111)  # 建立一个子图,如果要建立复合图,可以在这里修改

    #self.axes.hold(False)  # 每次绘图的时候不保留上一次绘图的结果

    FigureCanvas.__init__(self, self.fig)
    self.setParent(parent)

    '''定义FigureCanvas的尺寸策略,这部分的意思是设置FigureCanvas,使之尽可能的向外填充空间。'''
    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)  # 每隔一段时间就会触发一次update_figure函数。
    timer.start(1000)  # 触发的时间间隔为1秒。

'''动态图的绘图逻辑可以在这里修改'''

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.initUi()

代码语言:javascript
复制
def initUi(self):
    self.layout = QVBoxLayout(self)
    self.mpl = MyMplCanvas(self, width=5, height=4, dpi=100)
    # self.mpl.start_static_plot() # 如果你想要初始化的时候就呈现静态图,请把这行注释去掉
    #self.mpl.start_dynamic_plot() # 如果你想要初始化的时候就呈现动态图,请把这行注释去掉
    self.mpl_ntb = NavigationToolbar(self.mpl, self)  # 添加完整的 toolbar

    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_())

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档