matplotlib: ¿Cómo se pueden especificar los niveles de color en un historgtwig 2D?

Me gustaría trazar un histogtwig 2D que incluya números positivos y negativos. Tengo el siguiente código que usa pcolormesh pero no puedo especificar los niveles de color para forzar que el color blanco corresponda a cero (es decir, quiero que mi barra de colores sea simétrica alrededor de cero). También he intentado imshow.

Sé que puede especificar niveles de color en plt.contour y plt.contourf pero no puedo encontrar una manera de trazar el histogtwig 2D utilizando bloques.

Cualquier consejo sería muy apreciado.

import numpy as np import matplotlib.pyplot as plt from matplotlib import cm as CM fig = plt.figure() # create an example histogram which is asymmetrical around zero x = np.random.rand(400) y = np.random.rand(400) Z, xedges, yedges = np.histogram2d(x, y, bins=10) Z = Z - 2. plt.pcolormesh(xedges, yedges, Z, cmap=CM.RdBu_r) plt.colorbar() plt.savefig('test.png') 

introduzca la descripción de la imagen aquí

Agregue los parámetros vmin y vmax con valores absolutos iguales

 plt.pcolormesh(xedges, yedges, Z, cmap=CM.RdBu_r, vmin=-7, vmax=7) 

y ver si te gusta el resultado.

introduzca la descripción de la imagen aquí

Gracias a http://nbviewer.ipython.org/gist/pelson/5628989

 import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import from_levels_and_colors x = np.random.rand(400) y = np.random.rand(400) Z, xedges, yedges = np.histogram2d(x, y, bins=10) Z = Z - 2. # -1 0 3 6 9 cmap, norm = from_levels_and_colors([-1, 0, 3, 6, 9, 12], ['r', 'b', 'g', 'y', 'm']) # mention levels and colors here plt.pcolormesh(xedges, yedges, Z, cmap=cmap, norm=norm) plt.colorbar() plt.show() 

introduzca la descripción de la imagen aquí