Einfache Colormaps erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

Hallo,

ich habe folgendes Problem:
ich habe ein numpy-array mit unterschiedlichen Werten (floats64). Ich würde gerne jedem Wert einer Farbe zuweisen - wie bei einer colormap.
Anschließend möchte ich diese Farbwerte ausgespuckt kriegen.

Das eigentliche Problem:
Ich habe den Energieverbrauch einzelner Wohnungen bestimmt. Auf einer Darstellung habe ich Rechtecke gezeichnet. Jedes Rechteck symbolisiert eine Wohnung. Nun sollen diese Rechtecke eine entsprechende Farbe bekommen - nach dem Energieverbrauch. Eine Wohnung die Wenig verbraucht, erhält die Farbe grün; eine Wohnung die viel verbraucht, erhält die Farbe rot. Und dazwischen natürlich ein fließender Übergang der Farbe.

Hat jemand eine Idee, wie ich das am besten umsetze?

Vielen Dank
Gruß
BlackJack

@Pittan: Hilft das hier weiter: http://wiki.scipy.org/Cookbook/Matplotl ... _colormaps ?

Edit: die 'RdYlGn' ist wahrcheinlich schon das was Du brauchst.
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

Hallo BlackJack,

vielen Dank für deine Antwort.
Den Link habe ich bereits gesehen, nur werde ich aus dem dort geschriebenen Code nicht schlau.

Wie kann erhalte ich einen Farbwert aus der Colormap, wenn ich einen float-Wert gegeben habe?

Angenommen, 0.0 steht für grün, 1150 steht für rot. Die Wohnung, die ich betrachte, hat den Wert 758.
Wie erhalte ich dann die entsprechende Farbe?

Danke
Gruß
BlackJack

Colormap-Objekte sind aufrufbar. In Deinem Fall bietet es sich an die mit einer Gleitkommazahl zwischen 0.0 und 1.0 aufzurufen, Du müsstest den Wert also normalisieren:

Code: Alles auswählen

In [40]: cm = matplotlib.cm.RdYlGn_r

In [41]: 1. / 1150 * 758
Out[41]: 0.6591304347826087

In [42]: cm(1. / 1150 * 758)
Out[42]: (0.99377162666881791, 0.76309113292133102, 0.44821224142523375, 1.0)

In [43]: cm(1. / 1150 * 758, bytes=True)
Out[43]: (253, 194, 114, 255)
Statt mit einem Skalaren Wert könnte man die Funktion auch mit einem Numpy-Array aufrufen und sich damit die RGBA-Werte für mehrere Eingabewerte auf einmal geben lassen.
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

Vielen Dank! Hat funktioniert
Antworten