python - Multiple overlayed plots in pyqtgraph (trouble binding an axis) -
i having bit of problem graph. can both curves plot @ same time, second plot seems bound left axis well, know if can have right axis scale 2nd curve? here working short example:
from pyqt4 import qtcore, qtgui import pyqtgraph pg import random class mainwindow(qtgui.qmainwindow): def __init__(self, parent=none): super(mainwindow, self).__init__(parent) self.central_widget = qtgui.qstackedwidget() self.setcentralwidget(self.central_widget) self.login_widget = loginwidget(self) self.login_widget.button.clicked.connect(self.plotter) self.central_widget.addwidget(self.login_widget) def plotter(self): self.data =[0] self.data2 = [0] self.curve = self.login_widget.plot.getplotitem().plot() self.curve2 =self.login_widget.plot.getplotitem().plot() self.timer = qtcore.qtimer() self.timer.timeout.connect(self.updater) self.timer.start(0) def updater(self): self.data.append(self.data[-1]+0.2*(0.5-random.random()) ) self.curve.setdata(self.data, pen=pg.mkpen('b', width=1)) self.data2.append(self.data2[-1]+0.2*(0.5-random.random()) ) self.curve2.setdata(self.data2, pen=pg.mkpen('r', width=1)) class loginwidget(qtgui.qwidget): def __init__(self, parent=none): super(loginwidget, self).__init__(parent) layout = qtgui.qvboxlayout() pg.setconfigoption('background', 'w') pg.setconfigoption('foreground', 'k') self.button = qtgui.qpushbutton('start plotting') layout.addwidget(self.button) self.plot = pg.plotwidget(title='force , extension vs. time') #self.plot.showgrid(x=true,y=true) self.plot.showaxis('right') p2 = pg.viewbox() self.plot.scene().additem(p2) p2.setxlink(self.plot) ax2 = self.plot.getaxis('right').linktoview(p2) ax = self.plot.getaxis('bottom') ax3 = self.plot.getaxis('right') ax3.setlabel('extension', units='in.') ax.setlabel('time', units='s') ay = self.plot.getaxis('left') ay.setlabel('force', units='lbf') layout.addwidget(self.plot) self.setlayout(layout) def pg_clear(self): self.plot.clear() if __name__ == '__main__': app = qtgui.qapplication([]) window = mainwindow() window.show() app.exec_()
based on example shown in link have implemented following solution, have added necessary colors labels of each axis recognize data, have implemented updateviews() function when change size of screen displayed properly.
note: have modified function generates data changes observed.
class mainwindow(qtgui.qmainwindow): def __init__(self, parent=none): super(mainwindow, self).__init__(parent) self.central_widget = qtgui.qstackedwidget() self.setcentralwidget(self.central_widget) self.login_widget = loginwidget(self) self.login_widget.button.clicked.connect(self.plotter) self.central_widget.addwidget(self.login_widget) self.curve = self.login_widget.it1 self.curve2 =self.login_widget.it2 def plotter(self): self.data =[0] self.data2 = [0] self.timer = qtcore.qtimer() self.timer.timeout.connect(self.updater) self.timer.start(0) def updater(self): self.data.append(self.data[-1]+10*(0.5-random.random())) self.curve.setdata(self.data, pen=pg.mkpen('b', width=1)) self.data2.append(self.data2[-1]+0.1*(0.5-random.random())) self.curve2.setdata(self.data2, pen=pg.mkpen('r', width=1)) class loginwidget(qtgui.qwidget): def __init__(self, parent=none): super(loginwidget, self).__init__(parent) layout = qtgui.qvboxlayout() pg.setconfigoption('background', 'w') pg.setconfigoption('foreground', 'k') self.button = qtgui.qpushbutton('start plotting') layout.addwidget(self.button) self.plot = pg.plotwidget(title='force , extension vs. time') layout.addwidget(self.plot) self.setlayout(layout) p1 = self.plot.plotitem p2 = pg.viewbox() p1.showaxis('right') p1.scene().additem(p2) p1.getaxis('right').linktoview(p2) p2.setxlink(p1) self.plot.getaxis('bottom').setlabel('time', units='s') self.plot.getaxis('left').setlabel('force', units='lbf', color="#0000ff") p1.getaxis('right').setlabel('extension', units='in.', color="#ff0000") def updateviews(): p2.setgeometry(p1.vb.sceneboundingrect()) p2.linkedviewchanged(p1.vb, p2.xaxis) updateviews() p1.vb.sigresized.connect(updateviews) self.it1 = p1.plot() self.it2 = pg.plotcurveitem() p2.additem(self.it2)
Comments
Post a Comment