2017-05-30 15 views
0

マトリックスのヒートマップを作成したい。私はまた、各列の色を別々にスケールしたいと思っています。私が持っている例では、大きな値が明らかに支配的で、すべての色がそこにあります。Matplotlib pcolor - 列単位の相対的な色

私は欲しいのは、[1、2、3]が[1000、2000、3000]と同じ縮尺で塗りつぶされるように、列に対する相対的な色付けです。 (私は、この例の解決策は、3つのレベルに対して同じ色の3つのストライプであると仮定します)。

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)  

これは限り私はすべての正方形に同じ大きさを得るように、それはまた、動作チャートの別のタイプ(例えば棒グラフ)で解決することができる場合。あなたはそれに基づいて各列を正規化することができます

答えて

1

は次のように合計です:

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

+0

偉大な小さなトリック。投稿いただき、ありがとうございます! – toni057

1

あなたが同じヒートマップでは、これらの値を表示したい場合は、あなたが最初のデータを変更する必要があります。たとえば、各列をその最大値で割る(正規化と呼ばれる)。

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

(ここでは、axis=0は、アレイの縦軸を意味している。

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

完璧に動作します、ありがとう! – toni057

関連する問題