Thanks to visit codestin.com
Credit goes to github.com

Skip to content
8 changes: 8 additions & 0 deletions lib/matplotlib/axes/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,11 @@ def _update_transScale(self):
mtransforms.blended_transform_factory(
self.xaxis.get_transform(), self.yaxis.get_transform()))

def _update_collection_limits(self, collection):
offsets = collection.get_offsets()
if offsets is not None and len(offsets):
self.update_datalim(offsets)

Comment thread
timhoffm marked this conversation as resolved.
Outdated
def get_position(self, original=False):
"""
Return the position of the Axes within the figure as a `.Bbox`.
Expand Down Expand Up @@ -2421,6 +2426,7 @@ def add_collection(self, collection, autolim=True):
self._request_autoscale_view()

self.stale = True
collection._set_in_autoscale(autolim)
return collection

def add_image(self, image):
Expand Down Expand Up @@ -2649,6 +2655,8 @@ def relim(self, visible_only=False):
self._update_patch_limits(artist)
elif isinstance(artist, mimage.AxesImage):
self._update_image_limits(artist)
elif isinstance(artist, mcoll.Collection):
self._update_collection_limits(artist)

def update_datalim(self, xys, updatex=True, updatey=True):
"""
Expand Down
21 changes: 21 additions & 0 deletions lib/matplotlib/tests/test_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -10189,3 +10189,24 @@ def test_errorbar_uses_rcparams():
assert_allclose([cap.get_markeredgewidth() for cap in caplines], 2.5)
for barcol in barlinecols:
assert_allclose(barcol.get_linewidths(), 1.75)


def test_relim_updates_scatter_offsets():
fig, ax = plt.subplots()

xs = np.linspace(0, 10, 100)
ys = np.sin(xs)
scatter = ax.scatter(xs, ys)

# Shift scatter upward
new_ys = np.sin(xs) + 5
scatter.set_offsets(np.column_stack((xs, new_ys)))

ax.relim()
ax.autoscale_view()

ymin, ymax = ax.get_ylim()

# New limits should reflect shifted data
assert ymin > 3
assert ymax > 5
Loading