pyplot legends example python matplotlib

python - legends - AttributeError al agregar barra de color en matplotlib



matplotlib title position (3)

El siguiente código no se puede ejecutar en Python 2.5.4:

from matplotlib import pylab as pl import numpy as np data = np.random.rand(6,6) fig = pl.figure(1) fig.clf() ax = fig.add_subplot(1,1,1) ax.imshow(data, interpolation=''nearest'', vmin=0.5, vmax=0.99) pl.colorbar() pl.show()

El mensaje de error es

C:/temp>python z.py Traceback (most recent call last): File "z.py", line 10, in <module> pl.colorbar() File "C:/Python25/lib/site-packages/matplotlib/pyplot.py", line 1369, in colorbar ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw) File "C:/Python25/lib/site-packages/matplotlib/figure.py", line 1046, in colorbar cb = cbar.Colorbar(cax, mappable, **kw) File "C:/Python25/lib/site-packages/matplotlib/colorbar.py", line 622, in __init__ mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax AttributeError: ''NoneType'' object has no attribute ''autoscale_None''

¿Cómo puedo agregar una barra de color a este código?

A continuación está la información del intérprete:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>


(Esta es una pregunta muy antigua que sé) La razón por la que está viendo este problema es porque ha mezclado el uso de la máquina de estado (matplotlib.pyplot) con el enfoque OO para agregar imágenes a un eje.

La función plt.imshow difiere del método ax.imshow de una manera sutilmente diferente. El método ax.imshow :

  • crea y devuelve una imagen que se ha agregado a los ejes

La función plt.imshow :

  • crea y devuelve una imagen que se ha agregado a los ejes actuales, y establece que la imagen sea la imagen / mapa "actual" (que luego puede recogerse automáticamente mediante la función plt.colorbar ).

Si desea poder usar la plt.colorbar (que en todos los casos menos extremos) lo hace con el método ax.imshow , tendrá que pasar la imagen devuelta (que es una instancia de ScalarMappable ) a plt.colorbar como primer argumento:

plt.imshow(image_file) plt.colorbar()

es equivalente (sin usar la máquina de estado) a:

img = ax.imshow(image_file) plt.colorbar(img, ax=ax)

Si ax es los ejes actuales en pyplot, entonces kwarg ax=ax no es necesario.


Agrega / edita las siguientes líneas a tu código

plot = ax.imshow(data, interpolation=''nearest'', vmin=0.5, vmax=0.99) pl.colorbar(plot)


Nota: Estoy usando Python 2.6.2. El mismo error se presentó con su código y la siguiente modificación resolvió el problema.

Leí el siguiente ejemplo de barra de colores: http://matplotlib.sourceforge.net/examples/pylab_examples/colorbar_tick_labelling_demo.html

from matplotlib import pylab as pl import numpy as np data = np.random.rand(6,6) fig = pl.figure(1) fig.clf() ax = fig.add_subplot(1,1,1) cax = ax.imshow(data, interpolation=''nearest'', vmin=0.5, vmax=0.99) fig.colorbar(cax) pl.show()

No estoy seguro de por qué tu ejemplo no funcionó. No estoy tan familiarizado con matplotlib.