PyQT5结合Matplotlib绘制函数图像

参考链接:https://zhuanlan.zhihu.com/p/26379590

(文末有福利)
博主相关文章:
(1)PyQt5练习:结合matplotlib绘图
(2)PyQt5练习:词典翻译
(3)Linux下Qt/PyQt5无法调用fcitx中文输入法解决办法
(4)Windows python PyQt5调用百度api实现图片转文
(5)PyQt5练习:积分计算器

先贴出效果图
在这里插入图片描述
然后简单粗暴给出代码:

#coding:utf-8

# 导入matplotlib模块并使用Qt5Agg
import matplotlib
matplotlib.use('Qt5Agg')
# 使用 matplotlib中的FigureCanvas (在使用 Qt5 Backends中 FigureCanvas继承自QtWidgets.QWidget)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5 import QtCore, QtWidgets,QtGui
from PyQt5.QtWidgets import *
import matplotlib.pyplot as plt
import sys
import numpy as np
from numpy import *

class App(QtWidgets.QDialog):
    def __init__(self,parent=None):
        # 父类初始化方法
        super(App,self).__init__(parent)
        
        self.initUI()
    
    def initUI(self):
        self.setWindowTitle('PyQt5结合Matplotlib绘制函数图像')
        # 几个QWidgets
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.button_plot = QtWidgets.QPushButton("绘制函数图像")
        self.line = QLineEdit() # 输入函数
        # 连接事件
        self.button_plot.clicked.connect(self.plot_)
        
        # 设置布局
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.canvas)
        layout.addWidget(self.line)
        layout.addWidget(self.button_plot)
        self.setLayout(layout)

    # 连接的绘制的方法
    def plot_(self):
        ax = self.figure.add_axes([0.1,0.1,0.8,0.8])
        ax.clear() #每次绘制一个函数时清空绘图
        x = linspace(-3,3,6000)
        y = eval(self.line.text()) #使用了eval函数
        ax.plot(x,y)
        self.canvas.draw()

# 运行程序
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main_window = App()
    main_window.show()
    app.exec()

这里只是简单演示了如何在pyqt5里结合matplotlib绘图,还可以设置绘图区间,函数变量(这里硬编码写死了x为函数变量,所有才能使用eval赋值得到结果)等,需要读者自己发挥了

如果需要PyQt5相关书籍教程的话,可以微信扫描下面二维码关注公众号“向芽塔”,后台回复“pyqt5教程”获取哦!
在这里插入图片描述

这里预告一下书籍书签目录:
在这里插入图片描述

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在PyQt5的GUI中呈现matplotlib的图片主要有两种方法:使用Qt Widgets和使用Qt Quick。 使用Qt Widgets时,可以使用QWidget来创建一个显示matplotlib图片的窗口。首先,需要在PyQt5中将matplotlib的图形转换为Qt图像格式。可以使用FigureCanvasQTAgg类将matplotlib图形转换为Qt图像格式,然后使用matploblib中的绘图函数绘制图形。 以下是一个简单的示例代码: ``` import sys import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas class MyMainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Matplotlib in PyQt5') # 创建绘图区域 fig = plt.figure() axes = fig.add_subplot(111) axes.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5]) # 创建图像画布 canvas = FigureCanvas(fig) # 创建主窗口布局 layout = QVBoxLayout() layout.addWidget(canvas) # 创建主窗口窗口部件 main_widget = QWidget() main_widget.setLayout(layout) # 将主窗口部件设置为主窗口的中央部件 self.setCentralWidget(main_widget) if __name__ == '__main__': app = QApplication(sys.argv) window = MyMainWindow() window.show() sys.exit(app.exec_()) ``` 运行该代码将显示一个包含matplotlib图形的PyQt5主窗口。 使用Qt Quick时,可以使用QQuickWidget来创建一个能够显示matplotlib图片的窗口。首先,需要创建一个QQuickView,并使用setSource()方法将QML文件设置为PyQt5主窗口的内容,确保在主窗口中以正确的方式集成matplotlib图形。 以下是一个简单的示例代码: ``` import sys import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication from PyQt5.QtQuick import QQuickView from PyQt5.QtGui import QGuiApplication from PyQt5.QtCore import QUrl if __name__ == '__main__': app = QApplication(sys.argv) # 创建matplotlib图形 fig = plt.figure() axes = fig.add_subplot(111) axes.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5]) # 将matplotlib图形保存为文件 fig.savefig('plot.png') # 创建Qt Quick窗口 view = QQuickView() view.setSource(QUrl.fromLocalFile('mainwindow.qml')) # 将matplotlib图像文件路径作为图像URL传递到QML文件中 view.rootContext().setContextProperty("imagePath", "plot.png") # 显示窗口 view.show() # 运行应用程序 sys.exit(app.exec_()) ``` 同时,需要在根QML文件(例如mainwindow.qml)中添加一个Image元素,并将matplotlib图像的文件路径作为URL传递给该元素的source属性,以在窗口中显示matplotlib图像。 综上所述,以上是在PyQt5的GUI中使用matplotlib呈现图片的两种常见方法。 ### 回答2: 在PyQt5中使用Matplotlib库可以在GUI应用程序的主窗口中呈现图片。以下是一个简单的示例代码: ``` import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QWidget from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建一个Matplotlib图形对象 fig = Figure() # 创建一个使用Matplotlib图形对象的画布 canvas = FigureCanvas(fig) # 获取Matplotlib图形对象的绘图区域 axes = fig.add_subplot(111) # 在绘图区域中绘制一条直线 x = [1, 2, 3, 4, 5] y = [1, 3, 2, 4, 5] axes.plot(x, y) # 创建一个水平布局,并将画布添加到布局中 layout = QHBoxLayout() layout.addWidget(canvas) # 创建一个QWidget小部件,并将布局设置为其布局 widget = QWidget() widget.setLayout(layout) # 将QWidget小部件设置为主窗口的中央小部件 self.setCentralWidget(widget) # 创建一个应用程序对象 app = QApplication(sys.argv) # 创建一个主窗口对象 window = MainWindow() window.show() # 运行应用程序 sys.exit(app.exec_()) ``` 以上代码创建了一个带有Matplotlib图形的主窗口。我们首先导入了必要的模块,然后定义了一个继承自QMainWindow的MainWindow类。在MainWindow类的初始化方法中,我们创建了一个Matplotlib图形对象和一个使用该图形对象的画布。然后,我们使用add_subplot方法获取图形对象的绘图区域,并在该绘图区域中绘制了一条直线。接下来,我们创建了一个水平布局并将画布添加到布局中。然后,我们创建了一个QWidget小部件并将布局设置为其布局。最后,我们将QWidget小部件设置为主窗口的中央小部件,并展示了主窗口。 通过运行以上代码,我们可以在GUI的主窗口中看到Matplotlib绘制图像。 ### 回答3: 在PyQt5中,可以使用matplotlib库将图形呈现在GUI的主窗口中。首先,我们需要导入必要的模块: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from PyQt5.QtCore import Qt from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure ``` 然后,我们可以创建一个自定义的主窗口类,并在其构造函数中设置布局和图形内容: ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQt5-Matplotlib") # 创建一个用于显示图形的Matplotlib画布 self.figure = Figure() self.canvas = FigureCanvas(self.figure) # 在画布上创建一个子图,并绘制图形 ax = self.figure.add_subplot(111) ax.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_title("matplotlib示例") # 将画布添加到窗口的布局中 layout = QVBoxLayout() layout.addWidget(self.canvas) layout.setAlignment(Qt.AlignTop) # 创建一个用于显示布局的Widget,并将其设置为主窗口的中心部件 widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) ``` 最后,我们需要在主程序中创建应用程序实例,并显示主窗口: ```python if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 运行程序后,将会在GUI的主窗口中显示一个带有matplotlib图形的画布。您可以根据自己的需要定制图形的类型、样式和布局。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值