web-dev-qa-db-ja.com

ヒートマップSeabornfmt = 'd'エラー

私の前の拡張で 質問

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'を取得すると、float値のエラーが発生し、fmt='f'に変更され、目的の列の数が取得されます。

ただし、同じ軸の値が繰り返されると、目的の列からのカウントは追加されません。そのplsの解決策はありますか?

入力ファイルに見られるように

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

3行が繰り返されており、それらの値はJapanを表すセルの合計として表示され、Beta125として値ではなく41.7を表示する必要があります。 。どうすればそれを達成できますか?また、注釈として2つの値を与えることは可能ですか?

enter image description here

  1. 2番目の疑問は、pivotvalue='00:00:00'を指定しているが、ファイルから最後の列を動的に読み取るために必要であるということです。
7
user3964336

aggfunc キーワードを使用してdictを渡すことができます:

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

16