xlabel outside example python matplotlib colorbar

outside - plot python 3



Cómo recuperar la instancia de barra de color de la figura en matplotlib (2)

En primer lugar, creo que te confundes un poco entre los ejes (básicamente, la trama), la figura, el mapa escalar (la imagen, en este caso) y la instancia de la barra de colores.

La figure es la ventana donde está la trama. Es el contenedor de nivel superior.

Cada figura generalmente tiene uno o más axes . Estas son las tramas / subtramas.

Colorbars también están dentro de la figura. Agregar una barra de color crea un nuevo eje (a menos que especifique lo contrario) para que se muestre la barra de color. (Normalmente no se puede mostrar en los mismos ejes que la imagen, porque la barra de color debe tener sus propios límites xey, etc.)

Parte de su confusión se debe al hecho de que está mezclando la interfaz estado-máquina y la interfaz OO. Está bien hacer esto, pero necesita comprender la interfaz OO.

fig.axes[1] no es la instancia de la barra de colores. Son los ejes en los que se traza la barra de colores. (Además, fig.axes[1] es solo el segundo eje de la figura. Resulta que son los ejes en los que se encuentra la barra de colores para una figura con una subparcela y una barra de color, pero ese generalmente no será el caso.)

Si desea actualizar la barra de color, deberá mantener la instancia de colorbar que devuelve la colorbar .

Aquí hay un ejemplo de cómo abordarías normalmente las cosas:

import matplotlib.pyplot as plt import numpy as np data = np.random.random((10,10)) # Generate some random data to plot fig, ax = plt.subplots() # Create a figure with a single axes. im = ax.imshow(data) # Display the image data cbar = fig.colorbar(im) # Add a colorbar to the figure based on the image

Si vas a usar update_normal para actualizar la barra de color, se espera que ScalarMappable (por ejemplo, una imagen creada por imshow , la colección que crea la scatter , el ContourSet que crea el contour , etc.). (Hay otras maneras de hazlo también. A menudo, solo quieres actualizar los límites, en lugar de todo el asunto.) En el caso del código anterior, llamarías a cbar.update_normal(im) .

Sin embargo, no ha creado una nueva AxesImage , acaba de cambiar sus datos. Por lo tanto, probablemente solo quieras hacer:

cbar.set_clim(newimg.min(), newimg.max())

todas. Quiero actualizar la barra de colores de una figura cuando se modifican los datos de imagen. Entonces algo así como:

img = misc.lena() fig = plt.figure() ax = plt.imshow(im) plt.colorbar(ax) newimg = img+10*np.randn(512,512) def update_colorbar(fig,ax,newimg): cbar = fig.axes[1] ax.set_data(newimg) cbar.update_normal(ax) plt.draw()

pero parece que los resultados devueltos de fig.axes () no tienen la instancia de la barra de color como esperaba. Probablemente pueda pasar la instancia de la barra de color como argumento a la función de actualización, pero pensé que solo pasar un parámetro de higo podría ser suficiente. ¿Alguien puede explicar un poco sobre cómo recuperar la barra de colores de la figura? ¿O por qué ''fig.axes ()'' no devuelve la instancia de AxesImage o Colobar sino simplemente los ejes o AxesSubplot? Creo que necesito más comprensión de las cosas de Axes / Figure. ¡Gracias!


A veces puede ser útil recuperar una barra de colores, incluso si no se mantuvo en una variable. En este caso, es posible recuperar la barra de color de la gráfica con:

#create a test image img=np.arange(20).reshape(5,4) plt.imshow(img) plt.colorbar() ax=plt.gca() #plt.gca() for current axis, otherwise set appropriately. im=ax.images #this is a list of all images that have been plotted cb=im[-1].colorbar #in this case I assume to be interested to the last one plotted, otherwise use the appropriate index

Ahora puede operar en cb como si estuviera almacenado, cambiar xlim o llamar a la actualización como se explica en otros comentarios. O puede eliminarlo con cb.remove() y volver a plt.colorbar() con plt.colorbar() .

plt.draw() o show deberían llamarse después para actualizar el diagrama.

Por cierto, la imagen es el mapa asociado a la barra de colores y se puede obtener con cb.mappable .