Python – Trazando una cuadrícula de color basada en valores

He estado buscando aquí y en la red. Encontré de alguna manera preguntas / respuestas cercanas a lo que quiero, pero aún no pude alcanzar lo que buscaba.

Tengo una matriz de, por ejemplo, 100 valores. Los valores están en el rango de 0 a 100. Quiero trazar esta matriz como una cuadrícula, llenando los cuadrados de acuerdo con los valores de la matriz.

Las soluciones que encontré hasta ahora son como las siguientes:

Dibujo de cuadrícula en matplotlib

y

gráfico de matplotlib personalizado: tablero de ajedrez como mesa con celdas de colores

En los ejemplos que mencioné, los rangos de los colores varían y no son fijos.

Sin embargo, lo que me pregunto es si puedo establecer los rangos para valores y colores específicos. Por ejemplo, si los valores están entre 10 y 20, deje que el color de la cuadrícula sea rojo. de lo contrario, si los valores están entre 20 y 30, deje que el color sea azul. etc.

¿Cómo se podría lograr esto en python?

Puede crear un ListedColormap para sus colores personalizados y color BoundaryNorms para umbralizar los valores.

import matplotlib.pyplot as plt from matplotlib import colors import numpy as np data = np.random.rand(10, 10) * 20 # create discrete colormap cmap = colors.ListedColormap(['red', 'blue']) bounds = [0,10,20] norm = colors.BoundaryNorm(bounds, cmap.N) fig, ax = plt.subplots() ax.imshow(data, cmap=cmap, norm=norm) # draw gridlines ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2) ax.set_xticks(np.arange(-.5, 10, 1)); ax.set_yticks(np.arange(-.5, 10, 1)); plt.show() 

Resultando en; Parcela con BoundaryNorms

Para más información, puede consultar este ejemplo de matplotlib .

Depende de las unidades en las que necesites que estén tus colores, pero solo una statement simple si debería hacer el truco.

 def find_colour(_val): # Colour value constants _colours = {"blue": [0.0, 0.0, 1.0], "green": [0.0, 1.0, 0.00], "yellow": [1.0, 1.0, 0.0], "red": [1.0, 0.0, 0.0]} # Map the value to a colour _colour = [0, 0, 0] if _val > 30: _colour = _colours["red"] elif _val > 20: _colour = _colours["blue"] elif _val > 10: _colour = _colours["green"] elif _val > 0: _colour = _colours["yellow"] return tuple(_colour) 

Y simplemente convierta esa tupla a las unidades que necesite, por ejemplo, RGBA (..). Luego puede implementar los métodos que parece que ya ha encontrado para alcanzar la cuadrícula.