Los valores de color en imshow para matplotlib?

Me gustaría saber el valor de color de un punto en el que hago clic cuando uso imshow () en matplotlib. ¿Hay alguna forma de encontrar esta información a través del controlador de eventos en matplotlib (de la misma manera que están disponibles las coordenadas x, y de su clic)? Si no, ¿cómo puedo encontrar esta información?

Específicamente estoy pensando en un caso como este:

imshow(np.random.rand(10,10)*255, interpolation='nearest') 

¡Gracias! –Irlanda

Aquí hay una solución pasable. Solo funciona para interpolation = 'nearest' . Todavía estoy buscando una forma más limpia de recuperar el valor interpolado de la imagen (en lugar de redondear las x, y seleccionadas y seleccionarlas de la matriz original). De todos modos:

 from matplotlib import pyplot as plt import numpy as np im = plt.imshow(np.random.rand(10,10)*255, interpolation='nearest') fig = plt.gcf() ax = plt.gca() class EventHandler: def __init__(self): fig.canvas.mpl_connect('button_press_event', self.onpress) def onpress(self, event): if event.inaxes!=ax: return xi, yi = (int(round(n)) for n in (event.xdata, event.ydata)) value = im.get_array()[xi,yi] color = im.cmap(im.norm(value)) print xi,yi,value,color handler = EventHandler() plt.show() 

La solución anterior solo funciona para una sola imagen. Si traza dos o más imágenes en el mismo script, el evento “inaxes” no hará una diferencia entre ambos ejes. Nunca sabrá en qué eje está haciendo clic, por lo que no sabrá qué valor de imagen debe mostrarse.

Si por “valor de color” quiere decir el valor de la matriz en un punto en el que se hace clic en un gráfico, esto es útil.

 from matplotlib import pyplot as plt import numpy as np class collect_points(): omega = [] def __init__(self,array): self.array = array def onclick(self,event): self.omega.append((int(round(event.ydata)), int(round(event.xdata)))) def indices(self): plot = plt.imshow(self.array, cmap = plt.cm.hot, interpolation = 'nearest', origin= 'upper') fig = plt.gcf() ax = plt.gca() zeta = fig.canvas.mpl_connect('button_press_event', self.onclick) plt.colorbar() plt.show() return self.omega 

El uso sería algo como:

 from collect_points import collect_points import numpy as np array = np.random.rand(10,10)*255 indices = collect_points(array).indices() 

Debería aparecer una ventana de trazado, usted hace clic en los puntos y se devuelven los índices de la matriz numpy.

Podrías probar algo como lo siguiente:

 x, y = len(df.columns.values), len(df.index.values) # subplot etc # Set values for x/y ticks/labels ax.set_xticks(np.linspace(0, x-1, x)) ax.set_xticklabels(ranges_df.columns) ax.set_yticks(np.linspace(0, y-1, y)) ax.set_yticklabels(ranges_df.index) for i, j in product(range(y), range(x)): ax.text(j, i, '{0:.0f}'.format(ranges_df.iloc[i, j]), size='small', ha='center', va='center')