relim осей matplotlib (встроенный в pyqt) не работает, если я ранее увеличил масштаб - PullRequest
0 голосов
/ 19 декабря 2018

В приведенном ниже примере я обновляю фигуру с изменяющейся длиной сигнала.функция relim работает, кроме случаев, когда я увеличиваю рисунок.Если я увеличил масштаб, Relim не сбрасывает правильный предел, а оси остаются увеличенными, независимо от длины сигнала, который я строю.Я не знаю, что я делаю здесь не так.

from PyQt5.QtWidgets import *
import sys
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np

class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.setFixedWidth(600)
        self.setFixedHeight(600)
        self.layout = QVBoxLayout()
        self.button = QPushButton('redraw')
        self.myscene= Viewer_signal(self)
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.myscene)
        self.centralWidget.setLayout(self.layout)

        self.button.clicked.connect(self.load)

    def load(self):
        self.myscene.update_Signal(np.random.rand(np.random.randint(1000,100000)),1000)


class Viewer_signal(QGraphicsView):
    def __init__(self, parent=None):
        super(Viewer_signal, self).__init__(parent)
        self.parent=parent
        self.scene = QGraphicsScene(self)
        self.setScene(self.scene)
        self.figure = Figure(facecolor='white')
        self.figure.subplots_adjust(left=0.08, bottom=0.03, right=0.98, top=0.99, wspace=0.28 , hspace=0.30)
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)

        self.axes_Sig = self.figure.add_subplot(111)
        self.axes_Sig.set_xlabel("Time [s]")
        self.axes_Sig.set_ylabel("Amp [mV]")
        self.Line_,= self.axes_Sig.plot(0,0 )

        self.canvas.setGeometry(0, 0, 1500, 500)
        layout = QVBoxLayout()
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        self.setLayout(layout)
        self.figure.tight_layout()

    def update_Signal(self,data,Fs):
        t = np.arange(data.shape[0])/Fs
        self.Line_.set_data(t, data)
        self.axes_Sig.relim()
        self.axes_Sig.autoscale_view(True,True,True)
        self.canvas.draw()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.setWindowTitle('window')
    ex.show()
    sys.exit(app.exec_( ))

обновление

даже установка ограничений по и не помогает:

def update_Signal(self,data,Fs):
        t = np.arange(data.shape[0])/Fs
        self.Line_.set_data(t, data)

        miniy = min(data)
        maxiy = max(data)
        self.axes_Sig.update_datalim( ((0, miniy), (t[-1], maxiy)))

        self.axes_Sig.relim()
        self.axes_Sig.autoscale_view(True,True,True)
        self.canvas.draw()

1 Ответ

0 голосов
/ 19 декабря 2018

Я думаю, что вы хотите использовать autoscale() вместо autoscale_view()

def update_Signal(self,data,Fs):
    t = np.arange(data.shape[0])/Fs
    self.Line_.set_data(t, data)
    self.axes_Sig.relim()
    self.axes_Sig.autoscale()
    self.canvas.draw()
...