簡體   English   中英

在 matplotlib 圖形中添加和刪除繪圖

[英]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.

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