Thanks Luke. Worked like a charm :-) On Friday, August 17, 2018 at 7:01:00 PM UTC+3, Luke Campagnola wrote: > > Try putting self.update() at the d of your setDataethod? > > On Fri, Aug 17, 2018, 01:51 Lior Weintraub <[email protected] > <javascript:>> wrote: > >> Hi Luke, >> >> I love pyqtgraph and use it whenever I need to plot data. >> I tried to make a live cadlestick plot but none of the options worked. >> The plot doesn't update unless I zoom in/out (interact with the window). >> The code I use: >> >> import pyqtgraph as pg >> from pyqtgraph import QtCore, QtGui >> import collections >> import numpy as np >> >> class CandlestickItem(pg.GraphicsObject): >> data = [] >> def __init__(self): >> pg.GraphicsObject.__init__(self) >> self.picture = QtGui.QPicture() >> >> def setData(self, toclh): >> # toclh is a tuple of (time, open, close, min, max) >> self.data.append(toclh) >> p = QtGui.QPainter(self.picture) >> p.setPen(pg.mkPen('w')) >> w = 1./3. >> for (t, open, close, min, max) in self.data: >> p.drawLine(QtCore.QPointF(t, min), QtCore.QPointF(t, max)) >> if open > close: >> p.setBrush(pg.mkBrush('r')) >> else: >> p.setBrush(pg.mkBrush('g')) >> p.drawRect(QtCore.QRectF(t-w, open, w*2, close-open)) >> p.end() >> >> >> def paint(self, p, *args): >> p.drawPicture(0, 0, self.picture) >> >> def boundingRect(self): >> ## boundingRect _must_ indicate the entire area that will be >> drawn on >> ## or else we will get artifacts and possibly crashing. >> ## (in this case, QPicture does all the work of computing the >> bouning rect for us) >> return QtCore.QRectF(self.picture.boundingRect()) >> >> data = [ ## fields are (time, open, close, min, max). >> (1., 10, 13, 5, 15), >> (2., 13, 17, 9, 20), >> (3., 17, 14, 11, 23), >> (4., 14, 15, 5, 19), >> (5., 15, 9, 8, 22), >> (6., 9, 15, 8, 16), >> ] >> >> >> class DynamicPlotter(): >> def __init__(self, sampleinterval, timewindow, size=(600,350)): >> # Data stuff >> self.tick_idx = 0 >> self._bufsize = int(timewindow/sampleinterval) >> self.databuffer = collections.deque([0.0]*self._bufsize, self. >> _bufsize) >> self.x = np.linspace(0.0, timewindow, self._bufsize) >> self.y = np.zeros(self._bufsize, dtype=np.float) >> # Candlestick data >> self.candlestick_item = CandlestickItem() >> # PyQtGraph stuff >> self.app = QtGui.QApplication([]) >> self.plt = pg.plot(title='Plot Viewer') >> self.plt.resize(*size) >> self.plt.showGrid(x=True, y=True) >> self.plt.setLabel('left', 'amplitude', 'V') >> self.plt.setLabel('bottom', 'time', 's') >> self.plt.setXRange(0.,timewindow) >> self.plt.setYRange(0.,30) >> self.curve = self.plt.plot(self.x, self.y, pen=(255,0,0)) >> self.plt.addItem(self.candlestick_item) >> >> >> # QTimer >> self.timer = QtCore.QTimer() >> self.timer.timeout.connect(self.updateplot) >> self.timer.start(1000) >> >> >> def updateplot(self): >> if(self.tick_idx < len(data)): >> self.candlestick_item.setData(data[self.tick_idx]) >> self.databuffer.appendleft( 1.0 ) >> self.y[:] = self.databuffer >> self.curve.setData(self.x, self.y) >> self.tick_idx += 1 >> self.app.processEvents() >> >> >> def run(self): >> self.app.exec_() >> >> >> if __name__ == '__main__': >> m = DynamicPlotter(sampleinterval=1., timewindow=7.) >> m.run() >> >> >> >> >> >> Thanks, >> Lior. >> >> On Tuesday, March 12, 2013 at 11:09:20 PM UTC+2, Luke Campagnola wrote: >>> >>> >>> >>> On Tue, Mar 12, 2013 at 4:33 PM, Julio Trevisan <[email protected]> >>> wrote: >>> >>>> Hi Luke >>>> >>>> Yes, it solved my original problem! Thank you so much for this!!! >>>> >>>> May I ask you a related question? I saw your comment inside >>>> CustomGraphicsItem saying that generating a QPicture makes rendering >>>> faster. I believe that this is not the case if I want to update my plot in >>>> realtime. In such case, it would be better to draw the primitives when >>>> paint is requested. What do you think? >>>> >>> >>> That's correct; if you expect each data set to be drawn only once, then >>> using QPicture will probably slow you down. Note that if you get rid of >>> QPicture, then you'll also have to do your own bounding rectangle >>> calculations. The boundingRect() methods are called quite frequently, so >>> make sure to optimize that as much as you can. If you have trouble with >>> performance, I'd be happy to discuss the tricks I've used. >>> >>> Luke >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "pyqtgraph" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/pyqtgraph/4ef297a8-158f-47b9-9813-135ce7a7a23c%40googlegroups.com >> >> <https://groups.google.com/d/msgid/pyqtgraph/4ef297a8-158f-47b9-9813-135ce7a7a23c%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> >
-- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/ca4682bf-0d13-4499-96c0-90214ff95b06%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
