-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
BUG: Fix relim() to support Collection artists (scatter, etc.) #31530
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
timhoffm
merged 9 commits into
matplotlib:main
from
tinezivic:fix-relim-scatter-offsets
Apr 21, 2026
+120
−34
Merged
Changes from 4 commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
07127b6
BUG: Fix relim() to support Collection artists (scatter, etc.) relim…
tinezivic 1d8b229
BUG: Add explanatory comments to relim() Collection branch
tinezivic 3da28af
BUG: Preserve autolim=False semantics for Collection relim support
tinezivic 68a6269
BUG: Extract _update_collection_limits helper; call from add_collecti…
tinezivic bfdb6c9
TST/DOC: align collection relim tests and autolim semantics
tinezivic ee070e3
TST: fix wrong minpos expectation in test_relim_collection
tinezivic a1c58ec
DOC/MNT: Address reviewer feedback on add_collection docstring and au…
tinezivic f90c147
TST/BUG: Fix _datalim_only semantics and add user-facing relim test
tinezivic 0161751
DOC: Fix Sphinx warning and address reviewer comments
tinezivic File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| ``relim()`` now accounts for Collection artists | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| Previously, `~.axes.Axes.relim` did not recalculate data limits for | ||
| `.Collection` artists (e.g. those created by `~.axes.Axes.scatter`). | ||
| Calling ``ax.relim()`` followed by ``ax.autoscale_view()`` now correctly | ||
| includes scatter plots and other collections in the axes limits. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6511,6 +6511,71 @@ def test_relim_visible_only(): | |
| assert ax.get_ylim() == y1 | ||
|
|
||
|
|
||
| def test_relim_collection(): | ||
| fig, ax = plt.subplots() | ||
| sc = ax.scatter([1, 2, 3], [4, 5, 6]) | ||
| ax.relim() | ||
| ax.autoscale_view() | ||
| xlim = ax.get_xlim() | ||
| ylim = ax.get_ylim() | ||
| assert xlim[0] <= 1 and xlim[1] >= 3 | ||
| assert ylim[0] <= 4 and ylim[1] >= 6 | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. relim works on |
||
|
|
||
| # After updating offsets, relim should track the new data. | ||
| sc.set_offsets([[10, 20], [30, 40]]) | ||
| ax.relim() | ||
| ax.autoscale_view() | ||
| xlim = ax.get_xlim() | ||
| ylim = ax.get_ylim() | ||
| assert xlim[0] <= 10 and xlim[1] >= 30 | ||
| assert ylim[0] <= 20 and ylim[1] >= 40 | ||
|
|
||
| # visible_only=True should ignore hidden collections. | ||
| line, = ax.plot([0, 1], [0, 1]) | ||
| sc.set_visible(False) | ||
| ax.relim(visible_only=True) | ||
| ax.autoscale_view() | ||
| xlim = ax.get_xlim() | ||
| ylim = ax.get_ylim() | ||
| # With scatter hidden, limits should be driven by the line only. | ||
| assert xlim[1] < 10 | ||
| assert ylim[1] < 10 | ||
|
|
||
|
|
||
| def test_relim_collection_autolim_false(): | ||
| # GH#30859 - Collection added with autolim=False must not participate | ||
| # in relim() later. | ||
| import matplotlib.collections as mcollections | ||
| fig, ax = plt.subplots() | ||
| ax.set_xlim(0, 1) | ||
| ax.set_ylim(0, 1) | ||
| # Build a collection far outside current limits and add it with autolim=False. | ||
| sc = mcollections.PathCollection([]) | ||
| sc.set_offsets([[100, 200], [300, 400]]) | ||
| ax.add_collection(sc, autolim=False) | ||
| ax.relim() | ||
| ax.autoscale_view() | ||
| # Limits must remain unchanged because autolim=False was requested. | ||
| assert ax.get_xlim() == (0, 1) | ||
| assert ax.get_ylim() == (0, 1) | ||
|
|
||
|
|
||
| def test_relim_collection_log_scale(): | ||
| # GH#30859 - relim() for Collection on a log-scaled axis should | ||
| # correctly pick up minpos so that log scaling works properly. | ||
| fig, ax = plt.subplots() | ||
| ax.set_xscale('log') | ||
| ax.set_yscale('log') | ||
| sc = ax.scatter([1e-3, 1e-2, 1e-1], [1e1, 1e2, 1e3]) | ||
| sc.set_offsets([[1e1, 1e4], [1e2, 1e5]]) | ||
| ax.relim() | ||
| ax.autoscale_view() | ||
| xlim = ax.get_xlim() | ||
| ylim = ax.get_ylim() | ||
| assert xlim[0] <= 1e1 and xlim[1] >= 1e2 | ||
| assert ylim[0] <= 1e4 and ylim[1] >= 1e5 | ||
|
|
||
|
|
||
| def test_text_labelsize(): | ||
| """ | ||
| tests for issue #1172 | ||
|
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we revert the logic here? Historically, Collections did not take part in autoscaling. When introducing the
in_autoscaleflag, we therefore defaulted it to False on Collections, but True for all other Artists.For better consistency we may now want Collections defaulting to True as well and explicitly set to False in case of
autolim=Falseas special-cased backward-compatibility. Am I missing a point why we can't do that?