2017-05-30 3 views
0

Ich möchte eine Heatmap einer Matrix erstellen. Ich möchte auch die Farben für jede Spalte separat skalieren. In dem Beispiel, das ich habe, dominieren klar die großen Werte und die ganze Farbe ist da.Matplotlib pcolor - Farbe relativ nach Spalten

Was ich will, ist die Färbung relativ zu den Säulen, so dass [1, 2, 3] im gleichen Maßstab wie [1000, 2000, 3000] gefärbt ist. (Ich nehme an, die Lösung für dieses Beispiel wäre 3 Streifen der gleichen Farbe für drei Ebenen).

import matplotlib.pyplot as plt 
import numpy as np 

d1 = np.array([[1, 2, 3], 
       [10, 20, 30], 
       [100, 200, 300], 
       [1000, 2000, 3000]]).T 
plt.pcolor(d1, cmap=plt.cm.Blues)  

Wenn dies kann durch eine andere Art von Diagramm gelöst werden (z barchart) funktioniert es auch, solange ich alle Quadrate die gleiche Größe.

Antwort

1

Sie jede Spalte normalisieren können darauf basiert Summe wie folgt aus:

d1 = d1.astype(float)/d1.sum(axis=0)

+0

Ein großer kleiner Trick. Sie Posting Dank! – toni057

1

Wenn Sie diese Werte in der gleichen Heatmap anzeigen möchten, müssen Sie zuerst die Daten ändern. Sie können z.B. teile jede Spalte durch ihr Maximum (Normalisierung genannt).

d1 = d1.astype(float)/d1.max(axis=0) 

(hier axis=0 die vertikale Achse des Arrays bedeutet.

import matplotlib.pyplot as plt 
import numpy as np 

d1 = np.array([[1, 2, 3], 
       [10, 20, 30], 
       [100, 200, 300], 
       [1000, 2000, 3000]]).T 
d1 = d1.astype(float)/d1.max(axis=0) 
plt.pcolor(d1, cmap=plt.cm.Blues)  
plt.colorbar() 
plt.show() 

enter image description here

+0

Funktioniert perfekt, danke! – toni057

Verwandte Themen