PyQtGraph: последний элемент не отображается, когда для setClipToView установлено значение True

Чтобы сократить время построения графика для обновления графического интерфейса, я установил setClipToView(True), чтобы сэкономить время процессора при построении ненужной (невидимой) части графика. Мой код выглядит следующим образом.

import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
from PySide.QtCore import QTime
import sys
import numpy as np
import time
from collections import deque

app = QtGui.QApplication([])
grams = deque()
penColor = pg.mkPen(color=(0,0,0),width=2)

pg.setConfigOption('background','w')
pg.setConfigOption('foreground','k')
pg.setConfigOptions(antialias=True)
view = pg.GraphicsView()
outerLayout = pg.GraphicsLayout()
outerLayout.layout.setSpacing(0)
view.setCentralItem(outerLayout)
view.show()
l2 = outerLayout.addLayout()

lowerGraph = l2.addPlot(name = "lower")
lowerGraph.showGrid(x=True,y=True)
lowerGraph.setClipToView(True)
lowerCurve = lowerGraph.plot(pen = penColor)

def update(grams):
    x = [item['x'] for item in grams]
    yLower = [item['y'] for item in grams]
    lowerGraph.setXRange(0,x[-1]+20)
    lowerCurve.setData(x=x, y=yLower)
    QtGui.QApplication.processEvents()
i = 0
j = 0.0
while i < 4:
    gram = np.random.uniform(0,51,size=1)
    grams.append({'x':j,'y':gram[0]})
    update(grams)
    i += 1
    j += 1000
    time.sleep(0.1)

lowerCurve.clear()
x = [item['x'] for item in grams]
y = [item['y'] for item in grams]
lowerGraph.setXRange(0,x[-1]+20)
lowerCurve = lowerGraph.plot(x=x,y=y,pen = penColor)

QtGui.QApplication.instance().exec_()

когда я прокомментировал setToCliptoView(True), последний элемент данных также отображается, но, наоборот, он отбрасывается от его построения.

Я думаю, это ошибка. Спасибо за уделенное время. С уважением, Упол.


person Upol Ryskulova    schedule 24.04.2015    source источник


Ответы (1)


Это ошибка в функции getData PlotDataItem, которая проявляется при динамическом обновлении усеченных данных: https://groups.google.com/forum/#!topic/pyqtgraph/p1UE-zvSI2g

В последней ветке разработки измените строку 564 PlotDataItem.py с

x1 = np.clip(int((range.right()-x[0])/dx)+2*ds , 0, len(x)-1)

to

x1 = np.clip(int((range.right()-x[0])/dx)+2*ds , 0, len(x))
person anonymous    schedule 25.05.2015