8000 Fix label_outer in the presence of colorbars. by anntzer · Pull Request #30098 · matplotlib/matplotlib · GitHub
[go: up one dir, main page]

Skip to content

Fix label_outer in the presence of colorbars. #30098

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

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

anntzer
Copy link
Contributor
@anntzer anntzer commented May 23, 2025

The subgridspec to be considered should be the one containing both the axes and the colorbar, not the sub-subgridspec of just the axes.

Closes #27305 (using #27305 (comment) and a test).

PR summary

PR checklist

@anntzer anntzer added topic: geometry manager LayoutEngine, Constrained layout, Tight layout topic: color/colorbar labels May 23, 2025
@github-actions github-actions bot added topic: axes and removed topic: geometry manager LayoutEngine, Constrained layout, Tight layout labels May 23, 2025
return
gs = ss.get_gridspec()
if (isinstance(gs, mpl.gridspec.GridSpecFromSubplotSpec)
and gs.nrows * gs.ncols == 6):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a comment what this magic is about.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Copy link
Member
@timhoffm timhoffm May 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Basically ok.

Would it make more sense that make_axes_gridspec explicitly flags the gridspec? Not sure what the right level of explicitness / specialization is, but it feels awkward to detect a gridspec for the colorbar thrugh nrows * ncols. Options could be (from less to more formal):

  • monkey-patch _is_colorbar_gridspec onto the gridspec, so that we can test if hasattr(gs, "_is_colorbar_gridspec")
  • add a _is_colorbar_gridspec attribute to all gridspecs, so that we can test if gs._is_colorbar_gridspec
  • Create a ColorbarGridSpec subclass so that we can test if isinstance(gs, ColorbarGridSpec)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would lean towards the least formal here - the subgridspec trick of making colorbars is pretty clunky, and note that it is explicitly not used by layout='constrained'.

The original ideas behind grid specs and subgridspecs were very good, but unfortunately loses the relationship between sibling axes if you change add the colorbar and make the colorbar and main axes child subgridspecs.

The subgridspec to be considered should be the one containing both the
axes and the colorbar, not the sub-subgridspec of just the axes.
f, axs = plt.subplots(2, 2, sharex=True, sharey=True)
@pytest.mark.parametrize('with_colorbar', [True, False])
def test_label_outer(remove_ticks, with_colorbar):
fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this get tested with layout=constrained as well?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Axes.label_outer() does not work when there is a colorbar
3 participants
0