[英]Add and Remove plots to a matplotlib figure
我有一個用 PyQt5 開發的界面,有 4 個按鈕(2 個添加按鈕和 2 個刪除按鈕)。 我可以繪制第一個數據集,但是當我繪制第二個數據集時,第一個數據集被刪除。 這個想法是有可能通過單擊按鈕來添加或刪除數據集。 這里的初始代碼:
class Mainwindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Mainwindow, self).__init__(parent)
self.setupUi(self)
self.btn_add_1.clicked.connect(self.add_1)
self.btn_add_2.clicked.connect(self.add_2)
self.btn_remove_1.clicked.connect(self.remove_1)
self.btn_remove_2.clicked.connect(self.remove_2)
def add_1(self):
self.x = [1,2,3,4,5]
self.y = [1,2,3,4,5]
self.add_selected = 'add_1'
self.Graphique = Graphique(self.add_selected, self.x, self.y, self)
self.gridLayout.addWidget(self.Graphique, 0, 0, 1, 1)
def add_2(self):
self.x = [1,2,3,4,5]
self.y = [1,4,6,8,10]
self.add_selected = 'add_2'
self.Graphique = Graphique(self.add_selected, self.x, self.y, self)
self.gridLayout.addWidget(self.Graphique, 0, 0, 1, 1)
def remove_1(self):
pass
def remove_2(self):
pass
class Graphique(FigureCanvas):
def __init__(self, add_selected, x, y, parent =None):
self.x = x
self.y = y
self.add_selected = add_selected
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
self.setParent(parent)
self.Populate()
def Populate(self):
self.axes = self.figure.add_subplot(1,1,1)
lines = self.axes.plot(self.x, self.y,'o-')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
prog = Mainwindow()
prog.showMaximized()
sys.exit(app.exec_())
嘗試一下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.pyplot import Figure
import random
class LineBuilder:
def __init__(self, line):
self.line = line
self.xs = list(line.get_xdata())
self.ys = list(line.get_ydata())
self.btnAdd = QPushButton("add datasets just by clicking buttons")
self.btnAdd.clicked.connect(self.btnClick)
def btnClick(self):
# self.x = [1,2,3,4,5]
# self.y = [1,2,3,4,5]
self.x = random.sample(range(100), 5)
self.y = random.sample(range(100), 5)
self.xs.append(self.x)
self.ys.append(self.y)
self.line.set_data(self.xs, self.ys)
self.line.figure.canvas.draw()
# print(f" \n xs={self.xs}, \n ys={self.ys}")
class Mainwindow(QMainWindow): #, Ui_MainWindow):
def __init__(self, parent=None):
super(Mainwindow, self).__init__(parent)
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.fig = Figure()
self.ax = self.fig.add_subplot(111)
self.ax.set_title('Click to add a dataset')
self.line, = self.ax.plot([], [], 'o-')
self.canvas = FigureCanvas(self.fig)
self.gridLayout = QGridLayout(centralWidget)
self.gridLayout.addWidget(self.canvas)
self.ax.set_ylim([0, 100])
self.ax.set_xlim([0, 100])
self.LineBuilder = LineBuilder(self.line)
self.gridLayout.addWidget(self.LineBuilder.btnAdd, 2, 0, 1, 1)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
prog = Mainwindow()
prog.showMaximized()
sys.exit(app.exec_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.