Closed
Description
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
Activity
github-actions commentedon Apr 19, 2024
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.
solve issue matplotlib#28105
clementgilli commentedon Apr 19, 2024
I put this block after `collection.set_norm(norm) in order to call the norm's getter.
Seems to solve the issue.
solve issue matplotlib#28105
solve issue matplotlib#28105
Merge pull request #28106 from clementgilli/main
swapnil-patil8767 commentedon Jun 17, 2024
To fix this issue, the code needs to be modified so that the string is converted to a proper normalization object before attempting to use it. The suggestion is to move the block of code that handles normalization ('norm') further down after it has been properly set.
This block checks and attempts to autoscale norm.
code-
updated code :
QuLogic commentedon Jun 17, 2024
This was already fixed by #28106.