matplotlib contour plot with lognorm - colorbar levels

colorbar, contour, matplotlib, numpy, python

Solution

From here I found an approach that seems to fit your question:

from matplotlib.ticker import LogFormatter
l_f = LogFormatter(10, labelOnlyBase=False)
cbar = plt.colorbar(CF, ticks=lvls, format=l_f)

which will give:

note that the spacing between the ticks are indeed in log scale...

Problem

I am trying to make a contour plot with defined levels and log norm. Below is an example: ``` import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm delta = 0.025 x = y = np.arange(0, 3.01, delta) X, Y = np.meshgrid(x, y) Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) Z = 10 * (Z1* Z2) fig=plt.figure() ax1 = fig.add_subplot(111) lvls = np.logspace(-4,0,20) CF = ax1.contourf(X,Y,Z, norm = LogNorm(), levels = lvls ) CS = ax1.contour(X,Y,Z, norm = LogNorm(), colors = 'k', levels = lvls ) cbar = plt.colorbar(CF, ticks=lvls, format='%.4f') plt.show() ``` My questions is: The levels should be written in the format: '1x10^-4', '1.6x10^-4', ... How do i do this, without specifying each level manually? I am using python 2.7.3 with matplotlib 1.1.1 on Windows 7.

Original source

Related problems