Skip to content
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

[Bug]: Setting norm by string doesn't work for hexbin #28105

Open
anntzer opened this issue Apr 19, 2024 · 2 comments
Open

[Bug]: Setting norm by string doesn't work for hexbin #28105

anntzer opened this issue Apr 19, 2024 · 2 comments
Labels
Good first issue Open a pull request against these issues if there are no active ones! topic: collections and mappables
Milestone

Comments

@anntzer
Copy link
Contributor

anntzer commented Apr 19, 2024

Bug summary

In #20752 I added support for imshow(..., norm="log"), and documented that the feature is supported in particular by hexbin as well; but this doesn't actually work for hexbin, because hexbin tries to run stuff on the norm before normalizing strings.

Code for reproduction

from pylab import *
hexbin(rand(100), rand(100), norm="log")

Actual outcome

  File ".../matplotlib/axes/_axes.py", line 5247, in hexbin
    if norm.vmin is None and norm.vmax is None:
       ^^^^^^^^^
AttributeError: 'str' object has no attribute 'vmin'

Expected outcome

no error

Additional information

Probably the block

        # autoscale the norm with current accum values if it hasn't been set
        if norm is not None:
            if norm.vmin is None and norm.vmax is None:
                norm.autoscale(accum)

can just be moved down a bit after collection.set_norm(norm) (then we can get back the canonicalized norm from the collection). I haven't looked at how this interacts with the call to _scale_norm just below, though.

Operating system

any

Matplotlib Version

3.9.0.dev1523+g2723052176

Matplotlib Backend

any

Python version

3.12

Jupyter version

no

Installation

None

@tacaswell tacaswell added this to the v3.10.0 milestone Apr 19, 2024
@tacaswell tacaswell added the Good first issue Open a pull request against these issues if there are no active ones! label Apr 19, 2024
Copy link

Good first issue - notes for new contributors

This issue is suited to new contributors because it does not require understanding of the
Matplotlib internals. To get started, please see our contributing
guide
.

We do not assign issues. Check the Development section in the sidebar for linked pull
requests (PRs). If there are none, feel free to start working on it. If there is an open PR, please
collaborate on the work by reviewing it rather than duplicating it in a competing PR.

If something is unclear, please reach out on any of our communication
channels
.

clementgilli pushed a commit to clementgilli/matplotlib that referenced this issue Apr 19, 2024
@clementgilli
Copy link

clementgilli commented Apr 19, 2024

I put this block after `collection.set_norm(norm) in order to call the norm's getter.

# autoscale the norm with current accum values if it hasn't been set
        if norm is not None:
            if collection.norm.vmin is None and collection.norm.vmax is None:
                collection.norm.autoscale()

Seems to solve the issue.

clementgilli pushed a commit to clementgilli/matplotlib that referenced this issue Apr 19, 2024
clementgilli pushed a commit to clementgilli/matplotlib that referenced this issue Apr 19, 2024
tacaswell added a commit that referenced this issue Apr 29, 2024
Fix: [Bug]: Setting norm by string doesn't work for hexbin #28105
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Good first issue Open a pull request against these issues if there are no active ones! topic: collections and mappables
Projects
None yet
Development

No branches or pull requests

3 participants