簡體   English   中英

通過單擊按鈕更新使用Matplotlib生成的圖

[英]Updating Graph generated using Matplotlib by button click

我正在使用GUI應用程序,該應用程序使用Matplotlib包生成圖形,用於GUI設計,我正在使用PyQt5。 在此應用程序中,用戶從一行中加載數據,然后按生成按鈕,則生成一個已處理的圖形,現在的問題是,在關閉圖形時,當用戶加載新數據並按生成按鈕時,圖形為不再顯示。

import sys
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton
import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
plt.subplots_adjust(hspace=0)

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)
        #btn.resize(100, 100)
        #btn.move(100, 100)
        self.show()

    def generate_graph(self):
        # In real application these points gets updated
        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()

所以我發布了可以顯示我的問題的示例程序,在此我創建了一個按鈕並生成了兩個圖。 (注意:這是兩個子圖,我創建了兩個子圖,因為我需要在相鄰軸上寫ylabel,所以這是我無法更改的要求,它必須像這樣)

我按下了“生成”按鈕,就生成了圖形。 我關閉了該圖,然后再次按下了“生成”按鈕,但它沒有重新生成。 請建議我我可以添加些什么來實現這一目標。

用戶每次按下生成按鈕都可以生成新圖形嗎,我認為這也可以解決問題。 請提出建議並提前致謝。

我已經在這個論壇上搜索了這個主題,並嘗試了各種操作,例如清除軸等,但是我認為我做錯了,因為我是新手。

您正在將matplotlib.pyplotshow 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM