Hi,

I don't know exactly why that would be happening, but seems like a rounding 
error somewhere. Your bounding box function is returning a y-axis range of 
0 to 1 (which I assume is from the minimum size of the picture object 
maybe?) even though the data is a million times smaller than that.

If I change the bounding box method to:
    # import numpy as np
    def boundingRect(self):
        data = np.array(self.data)
        xmin = data[:,0].min()
        xmax = data[:,0].max()
        ymin = data[:,1:].min()
        ymax = data[:,1:].max()
        return QtCore.QRectF(xmin, ymin, xmax-xmin, ymax-ymin)
then it seems to work better.

Also needed to change this for python3:
request_data = json.loads(data.decode('utf8'))

Patrick

On Monday, 29 April 2019 04:23:40 UTC+9:30, [email protected] wrote:
>
> I use pyqtgraph to draw the candles, but if I zoom graph very much, image 
> hide.
>
> I noticed that when zoom very much, “paint” method stops being called. 
> Code with http request to exchange below.
>
> import pyqtgraph as pgfrom pyqtgraph import QtCore, QtGuifrom PyQt5 import 
> QtWidgets
> class CandlestickItem(QtWidgets.QGraphicsRectItem):
>     def __init__(self, data):
>         super(CandlestickItem, self).__init__()
>         self.data = data
>         self.generatePicture()
>
>     def generatePicture(self):
>         self.picture = QtGui.QPicture()
>         p = QtGui.QPainter(self.picture)
>         p.setPen(pg.mkPen('w'))
>         w = (self.data[1][0] - self.data[0][0]) / 3.
>         for (t, open, close, min, max) in self.data:
>             if max != min:
>                 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):
>         print('paint call')
>         p.drawPicture(0, 0, self.picture)
>
>     def boundingRect(self):
>         return QtCore.QRectF(self.picture.boundingRect())
>
> if __name__ == '__main__':
>     import sys
>     import urllib.request
>     import json
>
>     get_symbols_url = 
> 'https://api.hitbtc.com/api/2/public/candles/BCNBTC?period=M30&limit=1000'
>     response = urllib.request.urlopen(get_symbols_url)
>     request_data = json.loads(response.read())
>     data_list = []
>     for i in range(0, len(request_data)):
>         data_list.append((float(i), float(request_data[i]['open']), 
> float(request_data[i]['close']),
>                           float(request_data[i]['min']), 
> float(request_data[i]['max'])))
>
>     item = CandlestickItem(data_list)
>     plt = pg.plot()
>     plt.addItem(item)
>
>     if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
>         QtGui.QApplication.instance().exec_()
>
> I need to display very small values, for example, 0.0000001-0.00000015. 
> What can I do to prevent image hidden at high zoom?
>
>

-- 
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/a2a0571c-cf6e-484d-8ff4-166421ceae36%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to