¿Cómo uso la barra de colores con hist2d en matplotlib.pyplot?

Quiero hacer algo similar a http://matplotlib.org/examples/pylab_examples/hist2d_log_demo.html, pero he leído que usar pylab para código diferente al modo interactivo de python es una mala práctica, así que me gustaría hacer esto con matplotlib.pyplot. Sin embargo, no puedo averiguar cómo hacer que este código funcione utilizando pyplot. Usando, Pylab, el ejemplo dado es

from matplotlib.colors import LogNorm from pylab import * #normal distribution center at x=0 and y=5 x = randn(100000) y = randn(100000)+5 hist2d(x, y, bins=40, norm=LogNorm()) colorbar() show() 

Lo he intentado mucho como

 import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(1,1,1) h1 = ax1.hist2d([1,2],[3,4]) 

y desde aquí he intentado todo desde plt.colorbar(h1) plt.colorbar(ax1) plt.colorbar(fig) ax.colorbar() etc., etc., y no consigo que nada funcione.

En general, honestamente no tengo muy clara la relación entre pylab y pyplot, incluso después de leer http://matplotlib.org/faq/usage_faq.html . Por ejemplo, show() en pylab parece convertirse en plt.show() en pyplot, pero por alguna razón, la colorbar no se convierte en plt.colorbar() ?

Por ejemplo,

Esto debería hacerlo:

 from matplotlib.colors import LogNorm import matplotlib.pyplot as plt from numpy.random import randn #normal distribution center at x=0 and y=5 x = randn(100000) y = randn(100000)+5 H, xedges, yedges, img = plt.hist2d(x, y, norm=LogNorm()) extent = [yedges[0], yedges[-1], xedges[0], xedges[-1]] fig = plt.figure() ax = fig.add_subplot(1, 1, 1) im = ax.imshow(H, cmap=plt.cm.jet, extent=extent, norm=LogNorm()) fig.colorbar(im, ax=ax) plt.show() 

Observe cómo la barra de colores se adjunta a “fig”, no a “sub_plot”. Hay algunos otros ejemplos de esto aquí . Observe cómo también necesita generar un ScalarMappable con imshow , como se explica en la API aquí .

Una barra de colores necesita un objeto ScalarMappable como primer argumento. plt.hist2d devuelve esto como el cuarto elemento de la tupla devuelta.

 h = hist2d(x, y, bins=40, norm=LogNorm()) colorbar(h[3]) 

Código completo:

 from matplotlib.colors import LogNorm import matplotlib.pyplot as plt import numpy as np #normal distribution center at x=0 and y=5 x = np.random.randn(100000) y = np.random.randn(100000)+5 h = plt.hist2d(x, y, bins=40, norm=LogNorm()) plt.colorbar(h[3]) show() 

introduzca la descripción de la imagen aquí