Как очистить данные после того, как я использую PlotWidget.plot ()? - PullRequest
2 голосов
/ 12 мая 2019

Вот мой код:

import sys
import numpy as np
import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout


class MyGraph(QWidget):
    def __init__(self):
        super(MyGraph, self).__init__()
        self.resize(600, 600)

        pg.setConfigOption('background', 'w')

        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)

        self.pw = pg.PlotWidget(self)
        self.pw.plot(x, y, pen=None, symbol='o', symbolBrush='r')

        self.plot_btn = QPushButton('Replot', self)
        self.plot_btn.clicked.connect(self.plot_slot)

        self.v_layout = QVBoxLayout()
        self.v_layout.addWidget(self.pw)
        self.v_layout.addWidget(self.plot_btn)
        self.setLayout(self.v_layout)

    def plot_slot(self):
        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)

        # The new data is added to the existed one
        self.pw.plot(x, y, pen=None, symbol='o', symbolBrush='r')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = MyGraph()
    demo.show()
    sys.exit(app.exec_())

Каждый раз, когда я нажимаю кнопку, я хочу очистить существующие данные и заново отобразить новые, но PlotWidget, похоже, не имеет относительной функции, позволяющей мне это делать.

Есть ли способ очистить данные?

Спасибо!

1 Ответ

1 голос
/ 12 мая 2019

Метод построения графика PlotWidget генерирует элемент, который отвечает за рисование, в вашем случае при каждом нажатии кнопки создается другой график, поэтому вы наблюдаете, что поведение. Решение состоит в том, чтобы повторно использовать

class MyGraph(QWidget):
    def __init__(self):
        super(MyGraph, self).__init__()
        self.resize(600, 600)

        pg.setConfigOption("background", "w")

        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)

        self.pw = pg.PlotWidget(self)
        self.plot = self.pw.plot(x, y, pen=None, symbol="o", symbolBrush="r")

        self.plot_btn = QPushButton("Replot", self, clicked=self.plot_slot)

        v_layout = QVBoxLayout(self)
        v_layout.addWidget(self.pw)
        v_layout.addWidget(self.plot_btn)

    def plot_slot(self):
        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)
        self.plot.setData(x, y)
...