2017-05-30 57 views
0

我想創建一個矩陣的熱圖。我也想分別縮放每列的顏色。在我的例子中,大數值顯然占主導地位,所有顏色都在那裏。Matplotlib pcolor - 按列相對的顏色

我想要的是相對於列的着色,因此[1,2,3]以與[1000,2000,3000]相同的比例着色。 (我想這個例子的解決方案是三個層次的相同顏色的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