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.