热图Seaborn fmt ='d'错误

时间:2015-06-27 10:20:52

标签: python pandas annotations seaborn

扩展到我以前的question

我可以很好地用Seaborn绘制热图,并提出建议可以得到注释。但我现在看到了一个新问题。

输入文件

Nos,Place,Way,Name,00:00:00,12:00:00
123,London,Air,Apollo,342,972
123,London,Rail,Beta,2352,342
123,Paris,Bus,Beta,545,353
345,Paris,Bus,Rava,652,974
345,Rome,Bus,Rava,2325,56
345,London,Air,Rava,2532,9853
567,Paris,Air,Apollo,545,544
567,Rome,Rail,Apollo,5454,5
876,Japan,Rail,Apollo,644,54
876,Japan,Bus,Beta,45,57
876,Japan,Bus,Beta,40,57
876,Japan,Bus,Beta,40,57

程序:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()

df = pd.read_csv('heat_map_data.csv')

df3 = df.copy()
for c in ['Place','Name']:
    df3[c] = df3[c].astype('category')

sns.heatmap(df3.pivot_table(index='Place', columns='Name', values='00:00:00' ),annot=True, fmt='.1f' )

plt.show() 
  1. 如果我接受fmt='d'然后我得到浮点值的错误并更改为fmt='f'我得到所需列的计数。
  2. 但是当重复相同的轴值时,它不会添加所需列的计数。有什么解决方案吗?

    如输入文件中所示

    876,Japan,Bus,Beta,45,57
    876,Japan,Bus,Beta,40,57
    876,Japan,Bus,Beta,40,57
    

    重复有3行,它们的值应显示为sum 表示JapanBeta的单元格不应该定义为125,而是显示41.7。我如何实现这一目标?还可以给两个值作为注释吗?

    enter image description here

    1. 现在第二个疑问是pivot我正在给value='00:00:00',但我需要它来动态读取文件中的最后一列。

1 个答案:

答案 0 :(得分:13)

您可以使用dict中传递的http://www.wellnessvisit.com/blog/关键字:

aggfunc:

  

函数,默认numpy.mean或函数列表   如果传递的函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)

sns.heatmap(df3.pivot_table(index='Place', columns='Name', 
values='00:00:00',aggfunc={'00:00:00':np.sum}), annot=True, fmt='.1f')

哪个输出:

enter image description here