2017-05-15 7 views
4

Ich habe hier und im Internet gesucht. Ich fand irgendwie enge Fragen/Antworten auf das, was ich wollte, konnte aber immer noch nicht erreichen, wonach ich suchte.Python - Plotten farbiges Gitter basierend auf Werten

Ich habe ein Array von zum Beispiel 100 Werte. 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 ausfüllen.

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

Drawing grid pattern in matplotlib

und

custom matplotlib plot : chess board like table with colored cells

In den Beispielen I erwähnt, die Bereiche der Farben variieren und sind nicht fest .

Allerdings frage ich mich, ob ich die Bereiche für bestimmte Werte und Farben festlegen kann. Beispiel: Wenn die Werte zwischen 10 und 20 liegen, lassen Sie die Farbe des Rasterquadrats rot erscheinen. Wenn die Werte zwischen 20 und 30 liegen, ist die Farbe blau. etc.

Wie könnte dies in Python erreicht werden?

Antwort

5

Sie können einen ListedColormap für Ihre benutzerdefinierten Farben erstellen und die Werte BoundaryNorms schwellen.

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

Resultierend in; Plot with BoundaryNorms

Für mehr können Sie dies überprüfen matplotlib example.

0

Es hängt davon ab, in welchen Einheiten Sie Ihre Farben haben müssen, aber nur eine einfache if-Anweisung sollte den Trick machen.

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) 

Und nur konvertieren, dass Tupel auf welche Einheiten Sie benötigen, z. RGBA (..). Sie können dann die Methoden implementieren, die Sie bereits gefunden haben, um das Raster zu erreichen.

+0

Danke für die Antwort. Ich denke jedoch, was @umutto gepostet hat, ist einfacher anzuwenden. Um ehrlich zu sein, wusste ich nicht, wie ich die Funktion beim Plotten verwenden soll (Entschuldigung, meine Ignoranz in Python) – philippos

Verwandte Themen