热图Seaborn fmt='d'

2024-04-28 14:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

扩展到我以前的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',得到所需列的计数。

但当相同的轴值重复时,它不会从所需列中添加计数。有什么解决办法吗?

在输入文件中可以看到

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',但我需要它从文件中动态读取最后一列。

Tags: nameimportasplaceairbetalondonparis
1条回答
网友
1楼 · 发布于 2024-04-28 14:35:56

可以使用aggfunc关键字传入dict:

聚合函数:

function, default numpy.mean, or list of functions If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names (inferred from the function objects themselves)

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

相关问题 更多 >