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