8000 Backport PR #9363: Allow invalid limits when panning · matplotlib/matplotlib@4b872b1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4b872b1

Browse files
dstansbyMeeseeksDev[bot]
authored andcommitted
Backport PR #9363: Allow invalid limits when panning
1 parent 75707d6 commit 4b872b1

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3803,7 +3803,7 @@ def format_deltas(key, dx, dy):
38033803
dy = dy / abs(dy) * abs(dx)
38043804
else:
38053805
dx = dx / abs(dx) * abs(dy)
3806-
return (dx, dy)
3806+
return dx, dy
38073807

38083808
p = self._pan_start
38093809
dx = x - p.x
@@ -3812,29 +3812,30 @@ def format_deltas(key, dx, dy):
38123812
return
38133813
if button == 1:
38143814
dx, dy = format_deltas(key, dx, dy)
3815-
result = p.bbox.translated(-dx, -dy) \
3816-
.transformed(p.trans_inverse)
3815+
result = p.bbox.translated(-dx, -dy).transformed(p.trans_inverse)
38173816
elif button == 3:
38183817
try:
3819-
dx = -dx / float(self.bbox.width)
3820-
dy = -dy / float(self.bbox.height)
3818+
dx = -dx / self.bbox.width
3819+
dy = -dy / self.bbox.height
38213820
dx, dy = format_deltas(key, dx, dy)
38223821
if self.get_aspect() != 'auto':
3823-
dx = 0.5 * (dx + dy)
3824-
dy = dx
3825-
3822+
dx = dy = 0.5 * (dx + dy)
38263823
alpha = np.power(10.0, (dx, dy))
38273824
start = np.array([p.x, p.y])
38283825
oldpoints = p.lim.transformed(p.trans)
38293826
newpoints = start + alpha * (oldpoints - start)
3830-
result = mtransforms.Bbox(newpoints) \
3831-
.transformed(p.trans_inverse)
3827+
result = (mtransforms.Bbox(newpoints)
3828+
.transformed(p.trans_inverse))
38323829
except OverflowError:
38333830
warnings.warn('Overflow while panning')
38343831
return
38353832

3836-
self.set_xlim(*result.intervalx)
3837-
self.set_ylim(*result.intervaly)
3833+
valid = np.isfinite(result.transformed(p.trans))
3834+
points = result.get_points().astype(object)
3835+
# Just ignore invalid limits (typically, underflow in log-scale).
3836+
points[~valid] = None
3837+
self.set_xlim(points[:, 0])
3838+
self.set_ylim(points[:, 1])
38383839

38393840
@cbook.deprecated("2.1")
38403841
def get_cursor_props(self):

0 commit comments

Comments
 (0)
0