Matplotlib: muestra valores de matriz con imshow

Estoy tratando de crear una cuadrícula usando una función imshow como imshow .
De esta matriz:

 [[ 1 8 13 29 17 26 10 4], [16 25 31 5 21 30 19 15]] 

Me gustaría trazar el valor como un color Y el valor del texto en sí (1,2, …) en la misma cuadrícula. Esto es lo que tengo por el momento (solo puedo trazar el color asociado a cada valor):

 from matplotlib import pyplot import numpy as np grid = np.array([[1,8,13,29,17,26,10,4],[16,25,31,5,21,30,19,15]]) print 'Here is the array' print grid fig1, (ax1, ax2)= pyplot.subplots(2, sharex = True, sharey = False) ax1.imshow(grid, interpolation ='none', aspect = 'auto') ax2.imshow(grid, interpolation ='bicubic', aspect = 'auto') pyplot.show() 

Si, por alguna razón, tiene que usar una extensión diferente de la que se proporciona de forma natural mediante el imshow el siguiente método (incluso si es más artificial) hace el trabajo:

introduzca la descripción de la imagen aquí

 size = 4 data = np.arange(size * size).reshape((size, size)) # Limits for the extent x_start = 3.0 x_end = 9.0 y_start = 6.0 y_end = 12.0 extent = [x_start, x_end, y_start, y_end] # The normal figure fig = plt.figure(figsize=(16, 12)) ax = fig.add_subplot(111) im = ax.imshow(data, extent=extent, origin='lower', interpolation='None', cmap='viridis') # Add the text jump_x = (x_end - x_start) / (2.0 * size) jump_y = (y_end - y_start) / (2.0 * size) x_positions = np.linspace(start=x_start, stop=x_end, num=size, endpoint=False) y_positions = np.linspace(start=y_start, stop=y_end, num=size, endpoint=False) for y_index, y in enumerate(y_positions): for x_index, x in enumerate(x_positions): label = data[y_index, x_index] text_x = x + jump_x text_y = y + jump_y ax.text(text_x, text_y, label, color='black', ha='center', va='center') fig.colorbar(im) plt.show() 

Si desea colocar otro tipo de datos y no necesariamente los valores que utilizó para la imagen, puede modificar el script anterior de la siguiente manera (valores agregados después de los datos):

introduzca la descripción de la imagen aquí

 size = 4 data = np.arange(size * size).reshape((size, size)) values = np.random.rand(size, size) # Limits for the extent x_start = 3.0 x_end = 9.0 y_start = 6.0 y_end = 12.0 extent = [x_start, x_end, y_start, y_end] # The normal figure fig = plt.figure(figsize=(16, 12)) ax = fig.add_subplot(111) im = ax.imshow(data, extent=extent, origin='lower', interpolation='None', cmap='viridis') # Add the text jump_x = (x_end - x_start) / (2.0 * size) jump_y = (y_end - y_start) / (2.0 * size) x_positions = np.linspace(start=x_start, stop=x_end, num=size, endpoint=False) y_positions = np.linspace(start=y_start, stop=y_end, num=size, endpoint=False) for y_index, y in enumerate(y_positions): for x_index, x in enumerate(x_positions): label = values[y_index, x_index] text_x = x + jump_x text_y = y + jump_y ax.text(text_x, text_y, label, color='black', ha='center', va='center') fig.colorbar(im) plt.show() 

Desea recorrer los valores en la grid y usar ax.text para agregar la etiqueta a la gráfica.

Afortunadamente, para matrices 2D, numpy tiene ndenumerate , lo que hace esto bastante simple:

 for (j,i),label in np.ndenumerate(grid): ax1.text(i,j,label,ha='center',va='center') ax2.text(i,j,label,ha='center',va='center') 

introduzca la descripción de la imagen aquí