Fix incorrect clipping of horizontal axis when stopAxisAtTick is set (#932)

Horizontal axis are clipeed incorrectly because the code always takes
the vertical coordinate of the span even if the axis is horizontal.
This commit is contained in:
Janez Demšar 2019-06-20 07:07:57 +02:00 committed by Ogi Moore
parent f239276cdc
commit 9b8ef188a5
2 changed files with 36 additions and 2 deletions

View File

@ -900,16 +900,20 @@ class AxisItem(GraphicsWidget):
if self.style['stopAxisAtTick'][0] is True:
stop = max(span[0].y(), min(map(min, tickPositions)))
minTickPosition = min(map(min, tickPositions))
if axis == 0:
stop = max(span[0].y(), minTickPosition)
span[0].setY(stop)
else:
stop = max(span[0].x(), minTickPosition)
span[0].setX(stop)
if self.style['stopAxisAtTick'][1] is True:
stop = min(span[1].y(), max(map(max, tickPositions)))
maxTickPosition = max(map(max, tickPositions))
if axis == 0:
stop = min(span[1].y(), maxTickPosition)
span[1].setY(stop)
else:
stop = min(span[1].x(), maxTickPosition)
span[1].setX(stop)
axisSpec = (self.pen(), span[0], span[1])

View File

@ -0,0 +1,30 @@
import pyqtgraph as pg
app = pg.mkQApp()
def test_AxisItem_stopAxisAtTick(monkeypatch):
def test_bottom(p, axisSpec, tickSpecs, textSpecs):
assert view.mapToView(axisSpec[1]).x() == 0.25
assert view.mapToView(axisSpec[2]).x() == 0.75
def test_left(p, axisSpec, tickSpecs, textSpecs):
assert view.mapToView(axisSpec[1]).y() == 0.875
assert view.mapToView(axisSpec[2]).y() == 0.125
plot = pg.PlotWidget()
view = plot.plotItem.getViewBox()
bottom = plot.getAxis("bottom")
bottom.setRange(0, 1)
bticks = [(0.25, "a"), (0.6, "b"), (0.75, "c")]
bottom.setTicks([bticks, bticks])
bottom.setStyle(stopAxisAtTick=(True, True))
monkeypatch.setattr(bottom, "drawPicture", test_bottom)
left = plot.getAxis("left")
lticks = [(0.125, "a"), (0.55, "b"), (0.875, "c")]
left.setTicks([lticks, lticks])
left.setRange(0, 1)
left.setStyle(stopAxisAtTick=(True, True))
monkeypatch.setattr(left, "drawPicture", test_left)
plot.show()