1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
import numpy as np
import pyqtgraph as pg
from pyqtgraph.graphicsItems.PlotCurveItem import arrayToLineSegments
from tests.image_testing import assertImageApproved
def test_PlotCurveItem():
p = pg.GraphicsLayoutWidget()
p.resize(200, 150)
p.ci.setContentsMargins(4, 4, 4, 4) # default margins vary by platform
p.show()
v = p.addViewBox()
data = np.array([1,4,2,3,np.inf,5,7,6,-np.inf,8,10,9,np.nan,-1,-2,0])
c = pg.PlotCurveItem(data)
c.setSegmentedLineMode('off') # test images assume non-segmented-line-mode
v.addItem(c)
v.autoRange()
# Check auto-range works. Some platform differences may be expected..
checkRange = np.array([[-1.1457564053237301, 16.145756405323731], [-3.076811473165955, 11.076811473165955]])
assert np.allclose(v.viewRange(), checkRange)
assertImageApproved(p, 'plotcurveitem/connectall', "Plot curve with all points connected.")
c.setData(data, connect='pairs')
assertImageApproved(p, 'plotcurveitem/connectpairs', "Plot curve with pairs connected.")
c.setData(data, connect='finite')
assertImageApproved(p, 'plotcurveitem/connectfinite', "Plot curve with finite points connected.")
c.setData(data, connect='finite', skipFiniteCheck=True)
assertImageApproved(p, 'plotcurveitem/connectfinite', "Plot curve with finite points connected using QPolygonF.")
c.setSkipFiniteCheck(False)
c.setData(data, connect=np.array([1,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0]))
assertImageApproved(p, 'plotcurveitem/connectarray', "Plot curve with connection array.")
p.close()
def test_arrayToLineSegments():
# test the boundary case where the dataset consists of a single point
xy = np.array([0.])
parray = arrayToLineSegments(xy, xy, connect='all', finiteCheck=True)
segs = parray.drawargs()
assert isinstance(segs, tuple) and len(segs) in [1, 2]
if len(segs) == 1:
assert len(segs[0]) == 0
elif len(segs) == 2:
assert segs[1] == 0
|