<QT>将matplotlib图形嵌入到PySide2界面中

摘要:
https://blog.csdn.net/weixin_43469047/article/details/115607083https://blog.csdn.net/qq_28053421/article/details/113828372https://blog.csdn.net/weixin_43469047/article/details/117733574?utm_source=app

https://blog.csdn.net/weixin_43469047/article/details/115607083

https://blog.csdn.net/qq_28053421/article/details/113828372

https://blog.csdn.net/weixin_43469047/article/details/117733574?utm_source=app&app_version=4.5.4

https://www.cnblogs.com/laoniubile/p/5904817.html

1. 界面设计

简单创建一个界面:一个 GraphicsView 和 一个 PushButton

<QT>将matplotlib图形嵌入到PySide2界面中第1张

2. 定义一个类,继承FigureCanvas
# from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QFileDialog, QMessageBox
from PySide2.QtUiTools import QUiLoader
import sys
import numpy as np

import matplotlib
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
# from matplotlib.figure import Figure
import matplotlib.pyplot as plt
 
matplotlib.use("Qt5Agg")  # 声明使用QT5

class MyFigureCanvas(FigureCanvas):
  '''
  通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplotlib的关键
  '''
  def __init__(self, parent=None, width=10, height=5, xlim=(0, 2500), ylim=(-2, 2), dpi=100):
    # 创建一个Figure
    fig = plt.Figure(figsize=(width, height), dpi=dpi, tight_layout=True) # tight_layout: 用于去除画图时两边的空白
 
    FigureCanvas.__init__(self, fig) # 初始化父类
    self.setParent(parent)
 
    self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法
    self.axes.spines['top'].set_visible(False) # 去掉上面的横线
    self.axes.spines['right'].set_visible(False)
    self.axes.set_xlim(xlim)
    self.axes.set_ylim(ylim)

class Stats:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('mtplt.ui')

        # self.ui.button.clicked.connect(self.handleCalc)
    # 初始化 gv_visual_data 的显示
        self.gv_visual_data_content = MyFigureCanvas(width=self.ui.graphicsView.width() / 101,
                            height=self.ui.graphicsView.height() / 101,
                            xlim=(0, 2*np.pi),
                            ylim=(-1, 1)) # 实例化一个FigureCanvas
        self.plot_cos()

        self.ui.btn_sin.clicked.connect(self.plot_sin)

    def plot_cos(self):
        x = np.arange(0, 2 * np.pi, np.pi / 100)
        y = np.cos(x)
        self.gv_visual_data_content.axes.plot(x, y)
        self.gv_visual_data_content.axes.set_title('cos()')
        # 加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中
        self.graphic_scene = QGraphicsScene() # 创建一个QGraphicsScene
        self.graphic_scene.addWidget(self.gv_visual_data_content) # 把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到放到QGraphicsScene中的
        self.ui.graphicsView.setScene(self.graphic_scene) # 把QGraphicsScene放入QGraphicsView
        self.ui.graphicsView.show() # 调用show方法呈现图形

    def plot_sin(self):
        x = np.arange(0, 2 * np.pi, np.pi / 100)
        y = np.sin(x)
        self.gv_visual_data_content.axes.clear() # 由于图片需要反复绘制,所以每次绘制前清空,然后绘图
        self.gv_visual_data_content.axes.plot(x, y)
        self.gv_visual_data_content.axes.set_title('sin()')
        self.gv_visual_data_content.draw() # 刷新画布显示图片,否则不刷新显示

app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()

免责声明:文章转载自《<QT>将matplotlib图形嵌入到PySide2界面中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇手写一个类加载器demo时间片轮询-应用程序架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python数据可视化--matplotlib

抽象化|具体化: 如盒形图 | 现实中的图 功能性|装饰性:没有装饰和渲染 | 包含艺术性美学上的装饰 深度表达|浅度表达:深入层次的研究探索数据 | 易于理解的,直观的表示 多维度|单一维度:数据的多个层次 | 数据的单一维度 创造性|熟悉性:全新的方式进行可视化 | 被大众接受并且熟悉的方式 新颖性|冗余性: 每个元素只表述一次 | 每个元素表示多次...

Python--matplotlib

无论你工作在什么项目上,IPython都是值得推荐的。利用ipython --pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能。 本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找。 这样IPython配置为使用你所指定的matplotlib GU...

matplotlib添加子图(拼图功能)

  我们已经知道,matplotlib是python中的一个十分好用的作图库,它的简单的使用方法可以在之前的随笔中找到。传送门:https://www.cnblogs.com/chester-cs/p/11879444.html   之前没有涉及到的是一个用途十分广泛的功能:子图(拼图功能),想象我们有四个对比曲线图,是一个问题不同的算法实现结果。假如一个...

Matplotlib 绘图

Matplotlib 提供非常全面的数据可视化功能。 安装 非常简单,直接 执行 pip install matplotlib 即可 简单示例 下面的代码,运行一下看看 import matplotlib.pyplot as plt # 如果只传入一个数组作为参数, matplotlib 认为是 Y 轴的坐标 # 并自动产生 从 0 开始的 对应 X 轴...

python安装matplotlib:python -m pip install matplotlib报错

matplotlib是python中强大的画图模块。 首先确保已经安装python,然后用pip来安装matplotlib模块。 进入到cmd窗口下,建议执行python -m pip install -U pip setuptools进行升级。 接着键入python -m pip install matplotlib进行自动的安装,系统会自动下载安...

Mac下使用Matplotlib无法显示中文的解决办法

参考:matplotlib图例中文乱码? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/25404709/answer/309784195 1、下载字体安装包(需要直接的文件的,可以底下回复我) 2、解压之后在系统当中安装好,我的是Mac,打开字体册就可以安装了 3、找到matplotlib字体文件夹,例如:...