#python #matplotlib #pyqt5
Вопрос:
Вот мой код:
class MyPlotter:
def __init__(self,PlotWidget,buffersize,PlotParam=None):
# setup the plot here- empty data
self.x_data=[datetime.now()]
self.y_data=[0]
self._plot_ref = None
self.plot_len = len(self.x_data)
self.buffer = buffersize
self.plotwidget=PlotWidget
if PlotParam is not None:
self.plotwidget.canvas.ax.set_title(PlotParam["title"])
self.plotwidget.canvas.ax.set_ylabel(PlotParam["ytitle"])
def redraw(self,data):
# update plot here
self.x_data.append(data[0])
self.y_data.append(data[1])
self.plot_len = 1
if self._plot_ref is None:
plot_refs = self.plotwidget.canvas.ax.plot_date(self.x_data, self.y_data, 'b-')
# plot_refs2 = self.plotwidget.canvas.ax.plot_date(self.x_data, [1,1], 'r-')
self._plot_ref = plot_refs[0]
# self._plot_ref2=plot_refs2[0]
else:
self._plot_ref.set_data(self.x_data, self.y_data)
# self._plot_ref2.set_data(self.x_data, 1)
self.plotwidget.canvas.ax.relim()
self.plotwidget.canvas.ax.autoscale()
if self.plot_len >= self.buffer:
self.plotwidget.canvas.ax.set_xlim(left=self.x_data[self.plot_len - self.buffer],
right=self.x_data[self.plot_len - 1])
self.plotwidget.canvas.draw()
```
И я называю это с помощью такого Qtimer:
class MainWindow(QMainWindow,Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.timeplt=Plotter.MyPlotter(self.plotWidget,100)#,PlotParam={"title":"Timeonly", "ytitle":"Time"})
self.timer=QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.timeout.connect(self.updateplots)
self.timer.start()
def updateplots(self):
self.timeplt.redraw([datetime.now(),np.random.randint(5)])
app=QApplication(sys.argv)
window=MainWindow()
window.show()
app.exec_()
При этом я не могу использовать панель навигации на графике, так как график продолжает автоматически масштабироваться при каждом обновлении графика. Поэтому мне нужен способ определить, когда активна панель навигации, а затем использовать ее для временного отключения автоматического масштабирования.