The colour bar ticks are weirdly formatted when using a logarithmic scale when using version 3.5.0 or later.
Code for reproduction
Takenfromhttps://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_log.htmlimportmatplotlib.pyplotaspltimportnumpyasnpfromnumpyimportmafrommatplotlibimportticker, cmN=100x=np.linspace(-3.0, 3.0, N)
y=np.linspace(-2.0, 2.0, N)
X, Y=np.meshgrid(x, y)
# A low hump with a spike coming out.# Needs to have z/colour axis on a log scale so we see both hump and spike.# linear scale only shows the spike.Z1=np.exp(-X**2-Y**2)
Z2=np.exp(-(X*10)**2- (Y*10)**2)
z=Z1+50*Z2# Put in some negative values (lower left corner) to cause trouble with logs:z[:5, :5] =-1# The following is not strictly essential, but it will eliminate# a warning. Comment it out to see the warning.z=ma.masked_where(z<=0, z)
# Automatic selection of levels works; setting the# log locator tells contourf to use a log scale:fig, ax=plt.subplots()
cs=ax.contourf(X, Y, z, locator=ticker.LogLocator(), cmap=cm.PuBu_r)
cbar=fig.colorbar(cs)
plt.show()
Actual outcome
Expected outcome
Running the exact same code on 3.4.2 produces the expected behaviour
Agree this is broken inadvertently. We refactored some things in colorbar, but the infinite API complexity that crept in over the years is causing problems here again. I'll try to fix, but we almost need a separate colorbar for contour, rather than tests all over the place.
The colour bar ticks are weirdly formatted when using a logarithmic scale when using version 3.5.0 or later.
Code for reproduction
Takenfromhttps://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_log.htmlimportmatplotlib.pyplotaspltimportnumpyasnpfromnumpyimportmafrommatplotlibimportticker, cmN=100x=np.linspace(-3.0, 3.0, N)
y=np.linspace(-2.0, 2.0, N)
X, Y=np.meshgrid(x, y)
# A low hump with a spike coming out.# Needs to have z/colour axis on a log scale so we see both hump and spike.# linear scale only shows the spike.Z1=np.exp(-X**2-Y**2)
Z2=np.exp(-(X*10)**2- (Y*10)**2)
z=Z1+50*Z2# Put in some negative values (lower left corner) to cause trouble with logs:z[:5, :5] =-1# The following is not strictly essential, but it will eliminate# a warning. Comment it out to see the warning.z=ma.masked_where(z<=0, z)
# Automatic selection of levels works; setting the# log locator tells contourf to use a log scale:fig, ax=plt.subplots()
cs=ax.contourf(X, Y, z, locator=ticker.LogLocator(), cmap=cm.PuBu_r)
cbar=fig.colorbar(cs)
plt.show()
Actual outcome
Expected outcome
Running the exact same code on 3.4.2 produces the expected behaviour
Activity
jklymak commented on Jul 5, 2022
Agree this is broken inadvertently. We refactored some things in colorbar, but the infinite API complexity that crept in over the years is causing problems here again. I'll try to fix, but we almost need a separate colorbar for contour, rather than tests all over the place.
jklymak commented on Jul 5, 2022
BTW, a workaround here is to simply call
at the end of the script.
RemDelaporteMathurin commented on Jul 5, 2022
Interesting, I shall try it out, thanks!
adrianterronesaragon commented on Aug 28, 2024
This issue is still happening in version 3.9.12
tacaswell commented on Aug 28, 2024
We don't have a 3.9.12, did you mean 3.9.1 or 3.9.2?
I can not reproduce this with 3.9.2, 3.8.4, or main
adrianterronesaragon commented on Aug 29, 2024
Sorry, that is my Python version, my bad. I'm using Matplotlib version 3.5.1.
tacaswell commented on Aug 29, 2024
This bug looks like it was fixed in mpl 3.6.3 so you will need to upgrade atleast that far to get the fix.