【问题标题】: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() 
  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。我该如何做到这一点?也可以给出两个值作为注释吗?

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

【问题讨论】:

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

标签: python pandas annotations seaborn


【解决方案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')

哪些输出:

【讨论】:

猜你喜欢
  • 2016-11-21
  • 2015-09-14
  • 2017-10-30
  • 2020-08-04
  • 2021-04-14
  • 2018-05-15
  • 2015-09-12
  • 2020-07-06
  • 2017-08-18
相关资源
最近更新 更多