热图 Seaborn fmt='d' 错误

Posted

技术标签:

【中文标题】热图 Seaborn fmt=\'d\' 错误【英文标题】:Heat Map Seaborn fmt='d' error热图 Seaborn fmt='d' 错误 【发布时间】:2015-09-14 06:13:54 【问题描述】:

延伸到我之前的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() 
    如果我采用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。我该如何做到这一点?也可以给出两个值作为注释吗?

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

【问题讨论】:

从文件中动态读取最后一列是什么意思? value 是倒数第二列,您确实在中阅读了它 每个时间间隔更新文件并生成新的计数列(之前的数据处理部分),并且在每个时间间隔的数据处理之后绘制新列. 【参考方案1】:

您可以使用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')

哪些输出:

【讨论】:

@PadraicCunningham 请问我有一个合适的解决方案***.com/questions/31073889/…

以上是关于热图 Seaborn fmt='d' 错误的主要内容,如果未能解决你的问题,请参考以下文章

来自枢轴的seaborn热图中的数据顺序

如何反转seaborn热图颜色条的颜色

在 seaborn 热图上设置颜色条的最大值

热图中的日期轴 seaborn

Seaborn 热图阴谋失败

如何修复 matplotlib 和 seaborn 热图?