2017-05-17 37 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()