Python matplotlib contorno gráfico logarítmico escala de color

Tengo problemas con un trazado de contorno utilizando la escala de color logarítmica. Quiero especificar los niveles a mano. Matplotlib, sin embargo, dibuja la barra de color de una manera extraña: las tags no están bien colocadas y solo aparece un color. La idea se basa en http://adversus.110mb.com/?cat=8

¿Hay alguien ahí fuera que pueda ayudarme? Uso la última versión de git-repository matplotlib, v1.1.0 (2011-04-21)

import matplotlib.pyplot as plt import numpy as np from matplotlib.mlab import bivariate_normal from matplotlib.colors import LogNorm from matplotlib.backends.backend_pdf import PdfPages delta = 0.5 x = np.arange(-3.0, 4.001, delta) y = np.arange(-4.0, 3.001, delta) X, Y = np.meshgrid(x, y) Z = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) fig = plt.figure() ax = fig.add_subplot(1,1,1) #axim = ax.imshow(Z, norm = LogNorm()) axim = ax.contourf(X,Y,Z,levels=[1e0,1e-1,1e-2,1e-3],cmap=plt.cm.jet,norm = LogNorm()) cb = fig.colorbar(axim) pp = PdfPages('fig.pdf') pp.savefig() pp.close() plt.show() 

¡Muchas gracias por su ayuda! Funciona perfectamente, como sugirió … Sin embargo, tengo otra pregunta: ¿Por qué matplotlib no me permite seleccionar el número de líneas de nivel en el modo logarítmico?

 import matplotlib.pyplot as plt import numpy as np from matplotlib.mlab import bivariate_normal from matplotlib.colors import LogNorm from matplotlib.backends.backend_pdf import PdfPages delta = 0.5 x = np.arange(-3.0, 4.001, delta) y = np.arange(-4.0, 3.001, delta) X, Y = np.meshgrid(x, y) Z = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) fig = plt.figure() ax = fig.add_subplot(1,1,1) #axim = ax.imshow(Z, norm = LogNorm()) #axim = ax.contourf(X,Y,Z,levels=[1e-3,1e-2,1e-1,1e0],cmap=plt.cm.jet,norm = LogNorm()) axim = ax.contourf(X,Y,Z,20,cmap=plt.cm.jet,norm = LogNorm()) cb = fig.colorbar(axim) pp = PdfPages('fig.pdf') pp.savefig() pp.close() plt.show() 

http://sofes.miximages.com/python/VeVFQ.png

Este fue mi problema original …

Así que es fácil de arreglar; su orden de niveles significa que el nivel más bajo se dibuja en último lugar y, por lo tanto, cubre todo! Tratar:

 axim = ax.contourf(X,Y,Z,levels=[1e-3, 1e-2, 1e-1, 1e0],cmap=plt.cm.jet,norm = LogNorm()) 

En su lugar y debe obtener el resultado deseado.

Parece que los levels esperan valores crecientes. Intente cambiarlos a: levels=[1e-3, 1e-2, 1e-1, 1e0] y vea si eso resuelve su problema.