2017-05-17 38 views
2

我是想在工作應用seaborn熱圖縱列上的熊貓數據幀

df = pd.DataFrame(np.random.randint(1,100,size = (3,2))) 
df.columns = ['A','B'] 
df 
sns.heatmap(df, annot=True, fmt="d", linewidths=.5,cmap="RdYlGn") 

Output of code block - Entire Dataframe formatted as single heatmap的超級鏈接使用熱圖形式seaborn上的擺動大熊貓據幀像 輸出挑選45爲min和86 max和顏色代碼整個數據幀

但我無能爲力的是應用熱圖欄明智 即如條件格式應用列colummn而不是整個數據幀。在該超鏈接的示例類似 -

Output required/expected

對於COL1 45分鐘,和88最大被拾取並格式化爲COL2 70 & 86被拾取分別 條件格式化的逐列但仍顯示爲一張桌子。 。在這些例子中我看見我現在的DF的其餘部分是零製成,只有1列被格式化或整個數據框得到了格式化

任何人都可以在此請

+0

http://stackoverflow.com/help/mcve –

+0

從我有限的知識......似乎什麼你想情節單獨使用本機seaborn熱圖功能無法實現。不過,我確實知道你可以使用子圖進行操作。我不熟悉seaborn ...使用matplotlib怎麼樣?這裏有一個[示例](http://stackoverflow.com/questions/35727374/creating-a-matplotlib-heatmap-with-two-different-coloured-data-sets),它似乎與想要的在概念上相似 – Impuls3H

回答

2

感謝@ Implus3H這個例子幫助 這裏幫助是代碼的修改版本,它可以做列明智的條件格式,以防其他人有用

df是一個輸入數據框,其列在默認情況下會獲得顏色編碼的紅色陰影下面的示例功能

def columnwise_conditionalformat(df, color = 'Reds'): 
    nrows = len(df) 
    ncols = len(df.columns) 
    fig, ax = plt.subplots() 
    for i in range(ncols): 
     truthar = [True]*ncols 
     truthar[i] = False 
     mask = truthar = np.array(nrows * [truthar], dtype=bool) 
     red = np.ma.masked_where(mask, df) 
     ax.pcolormesh(red, cmap=color) 

    for y in range(df.shape[0]): 
     for x in range(df.shape[1]): 
      plt.text(x+.5,y+.5,'%.1f'% df.ix[y, x], 
        horizontalalignment='center', 
        verticalalignment='center' 
        ) 
    plt.show()