python
1# data作成
2import seaborn as sns
3import matplotlib.pyplot as plt
4import pandas as pd
5import numpy as np
6
7
8"""
9Sex,Survived
10male,0
11female,0
12male,1
13female,1
14"""
15
16Sex=['male']*480 +['male']*120+['female']*80+['female']*230
17Survived=[0]*480+[1]*120+[0]*80+[1]*230
18d={'Sex': Sex, 'Survived': Survived}
19
20df=pd.DataFrame(data=d)
21
22# いったんグラフの確認
23
24sns.countplot(x='Sex', hue = 'Survived', data = df)
25
26# パーセントのデータの作成
27## 集計値
28sub_df=df.value_counts().to_frame()
29sub_df.columns=['Value']
30## 小計
31total_df=sub_df.groupby(level=0).sum()
32total_df.columns=['Total']
33## 結合
34dfs = sub_df.join(total_df,on='Sex')
35
36## インデックス及び値の順番の修正
37dfs.sort_values(by=['Sex','Survived'],ascending=[False,True],inplace=True)
38dfs.reset_index(inplace=True)
39
40## パーセント値の計算
41dfs['Percent']=round(dfs.Value / dfs.Total * 100,2)
42## 必要なデータのみとする
43dfs=dfs[['Sex','Survived','Percent']]
44## グラフ用にデータを並び替える。
45dfs.sort_values(by='Survived',inplace=True)
46
47# 作図
48fig=plt.figure(figsize=(10,10))
49ax=sns.countplot(x='Sex', hue = 'Survived', data = df)
50
51# 参照元
52# https://stackoverflow.com/questions/33179122/seaborn-countplot-with-frequencies
53
54for i,p in enumerate(ax.patches):
55 x=p.get_bbox().get_points()[:,0]
56 y=p.get_bbox().get_points()[1,1]
57 ax.annotate('{:.1f}%'.format(dfs.iloc[i,].Percent), (x.mean(), y),
58 ha='center', va='bottom')
hueがSurvived
のため、パーセントデータは並び変えないとダメでした。
いかがでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/24 17:22