web-dev-qa-db-fra.com

Python - Tracé d'une grille colorée en fonction de valeurs

J'ai cherché ici et sur le net. J'ai trouvé des questions/réponses proches de ce que je veux, mais je ne pouvais toujours pas atteindre ce que je cherchais.

J'ai un tableau de par exemple, 100 valeurs. Les valeurs sont comprises entre 0 et 100 . Je souhaite tracer ce tableau sous forme de grille, en remplissant les carrés en fonction des valeurs du tableau. 

Les solutions que j'ai trouvées jusqu'à présent sont les suivantes: 

Dessin de grille dans matplotlib

et

Parcelle matplotlib personnalisée: échiquier comme tableau à cellules colorées

Dans les exemples que j'ai mentionnés, les gammes de couleurs varient et ne sont pas fixes.

Cependant, je me demande si je peux définir les plages pour des valeurs et des couleurs spécifiques ... Par exemple, si les valeurs sont comprises entre 10 et 20, laissez la couleur du carré de la grille être rouge .. sinon, si les valeurs sont comprises entre 20 et 30, laissez la couleur être bleue. etc.

Comment cela pourrait-il être réalisé en python? 

9
philippos

Vous pouvez créer un ListedColormap pour vos couleurs personnalisées et une couleur BoundaryNorms pour définir un seuil pour les valeurs.

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()

Résultant en; Plot with BoundaryNorms

Pour plus d'informations, vous pouvez consulter cet exemple matplotlib .

11
umutto

Cela dépend des unités dans lesquelles vos couleurs doivent être insérées, mais une simple déclaration if devrait suffire.

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)

Et convertissez simplement ce tuple en unités dont vous avez besoin, par exemple. RGBA (..). Vous pouvez ensuite implémenter les méthodes que vous avez déjà trouvées pour réaliser la grille.

0
Jordan Gleeson