Python 通过单击按钮更新使用Matplotlib生成的图形

Python 通过单击按钮更新使用Matplotlib生成的图形,python,matplotlib,Python,Matplotlib,我正在开发一个GUI应用程序,它使用Matplotlib包生成图形,对于GUI设计,我使用PyQt5。 在该应用程序中,用户从一行加载数据,然后按下“生成”按钮,生成已处理的图形,现在的问题是,在关闭图形时,当用户加载新数据并按下“生成”按钮时,图形不再显示 代码 因此,我张贴的样本程序,可以显示我的问题,在这我创建了一个按钮,并生成了两个绘图。 注意:这是两个子图,我创建了两个子图,因为我需要在相邻的轴上写入ylabel,所以这是一个我不能更改的要求,它必须是这样的 我按下生成按钮,图形就生成

我正在开发一个GUI应用程序,它使用Matplotlib包生成图形,对于GUI设计,我使用PyQt5。 在该应用程序中,用户从一行加载数据,然后按下“生成”按钮,生成已处理的图形,现在的问题是,在关闭图形时,当用户加载新数据并按下“生成”按钮时,图形不再显示

代码

因此,我张贴的样本程序,可以显示我的问题,在这我创建了一个按钮,并生成了两个绘图。 注意:这是两个子图,我创建了两个子图,因为我需要在相邻的轴上写入ylabel,所以这是一个我不能更改的要求,它必须是这样的

我按下生成按钮,图形就生成了。 我关闭了图形,再次按下生成按钮,但它没有重新生成。 请建议我可以添加什么来实现这一点

是否有可能在用户每次按下generate按钮时生成新的图形,我认为这也会解决问题。 请提前提出建议并表示感谢

我在这个论坛上搜索了这个主题,并尝试了各种方法,如清除轴等,但我认为我做错了什么,因为我对这一切都不熟悉。

您将matplotlib.pyplot的show GUI与另一个PyQt GUI混合在一起。问题是要在matplotlib GUI中显示的图形只创建一次。它一关上就丢了

简单的解决方案是在generate_graph函数中创建它。因此,每次按下按钮时都会创建并显示一个新图形

import sys
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

import matplotlib.pyplot as plt

class window(QMainWindow):

    def __init__(self):
        super(window, self).__init__()
        self.setGeometry(50, 50, 100, 100)
        self.setWindowTitle('Generate Graph')
        self.home()

    def home(self):
        btn = QPushButton('Generate', self)
        btn.clicked.connect(self.generate_graph)
        self.show()

    def generate_graph(self):
        fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
        plt.subplots_adjust(hspace=0)
        x = [0,1,2,3,4,5,6,7,8,9]
        y1 = [0,1,2,3,4,5,6,7,8,9]
        y2 = [0,1,2,3,4,5,6,7,8,9]
        ax1.plot(x,y1)
        ax2.plot(x,y2)
        plt.show()

def run():
    app = QApplication(sys.argv)
    Gui = window()
    sys.exit(app.exec_())

run()

感谢它的工作,即使我尝试了这个早些时候,但做了一些其他的错误,这就是为什么当时我的应用程序崩溃。非常感谢你的帮助。
import sys
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

import matplotlib.pyplot as plt

class window(QMainWindow):

    def __init__(self):
        super(window, self).__init__()
        self.setGeometry(50, 50, 100, 100)
        self.setWindowTitle('Generate Graph')
        self.home()

    def home(self):
        btn = QPushButton('Generate', self)
        btn.clicked.connect(self.generate_graph)
        self.show()

    def generate_graph(self):
        fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
        plt.subplots_adjust(hspace=0)
        x = [0,1,2,3,4,5,6,7,8,9]
        y1 = [0,1,2,3,4,5,6,7,8,9]
        y2 = [0,1,2,3,4,5,6,7,8,9]
        ax1.plot(x,y1)
        ax2.plot(x,y2)
        plt.show()

def run():
    app = QApplication(sys.argv)
    Gui = window()
    sys.exit(app.exec_())

run()