webentwicklung-frage-antwort-db.com.de

Python - Farbiges Raster basierend auf Werten zeichnen

Ich habe hier und im Internet gesucht. Ich fand irgendwie nahe Fragen/Antworten auf das, was ich will, konnte aber immer noch nicht das erreichen, wonach ich suche.

Ich habe ein Array von beispielsweise 100 Werten. Die Werte liegen im Bereich von 0 bis 100. Ich möchte dieses Array als Gitter darstellen und die Quadrate entsprechend den Werten im Array füllen. 

Die Lösungen, die ich bisher gefunden habe, sind wie folgt: 

Zeichnungsraster in Matplotlib

und

benutzerdefiniertes Matplotlib-Diagramm: schachbrettartiger Tisch mit farbigen Zellen

In den genannten Beispielen variieren die Farbbereiche und sind nicht festgelegt.

Ich frage mich jedoch, ob ich die Bereiche für bestimmte Werte und Farben festlegen kann Wenn beispielsweise __. Die Werte zwischen 10 und 20 liegen, lassen Sie die Farbe des Rasterquadrats rot sein Wenn die Werte zwischen 20 und 30 liegen, lassen Sie die Farbe blau sein. usw.

Wie konnte dies in Python erreicht werden? 

9
philippos

Sie können eine ListedColormap für Ihre benutzerdefinierten Farben und die Farbe BoundaryNorms erstellen, um die Werte festzulegen.

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

Ergebend; Plot with BoundaryNorms

Weitere Informationen finden Sie in diesem matplotlib-Beispiel .

11
umutto

Es hängt davon ab, in welchen Einheiten Sie Ihre Farben benötigen, aber nur eine einfache if-Anweisung sollte den Trick ausführen.

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)

Konvertieren Sie diesen Tuple einfach in die Einheiten, die Sie benötigen, z. RGBA (..). Sie können dann die Methoden implementieren, mit denen Sie das Raster bereits erreicht haben.

0
Jordan Gleeson