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
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
Actual outcome
Expected outcome
no error
Additional information
Probably the block
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