質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

714閲覧

matplotlibのグラフに、2つの単位を入れたいです。

rink

総合スコア80

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/06/22 11:52

編集2021/06/22 11:53

matplotlibで生成されるグラフに、2つの単位を入れたいです。具体的に言えば、

質問1
上のグラフの右側に、male, femaleそれぞれの青赤のグラフのパーセンテージを入れたいです。コードは、

Python

1sns.countplot('Sex', hue = 'Survived', data = train_data)

です。

パーセンテージを使ったグラフも生成しました。
質問2

Python

1get_legend_handles_labels()

を用いてみたのですが、できませんでした。

この二つの単位を、一つのグラフに統合したいです。その際、二つ目のグラフのmaleとfemaleの入れ替え方もご教示いただけると幸いです。

長くなってしまい、申し訳ございません。宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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')

countplot with percentage

hueSurvivedのため、パーセントデータは並び変えないとダメでした。
いかがでしょうか?

投稿2021/06/24 12:58

編集2021/06/24 13:16
toshikawa

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rink

2021/06/24 17:22

ありがとうございます!!!全然大丈夫です!!! ソウデスヨネ、hueで分けてる時点で、共通のパーセンテージの軸は作成できないですよね。。toshikawaさんのおかげで気づくことができました。ありがとうございます! 良ければ、https://teratail.com/questions/345510 もお分かりでしたら、ご教示願えないでしょうか。。宜しくお願いします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問