【그래프 그리기】 복수 계열의 막대 그래프를 matplotlib와 seaborn으로 써 보았다
12705 단어 파이썬seabornPython3matplotlib
소개
여러 계열의 막대 그래프 그리기를 matplotlib과 seaborn으로 비교해 보았습니다.
결론부터 말하자면 seaborn은 유용하다는 기사입니다.
그릴 그래프
왼쪽은 matplotlib이고 오른쪽은 seaborn입니다. 그래프만 보는 것과 같습니다만, 이것들을 묘화할 때까지는 seaborn는 편합니다.
막대의 색은 같은 색을 지정하고 있습니다만, seaborn 쪽이 조금 창백하네요. 이런 것도 어쩌면 설정이 어딘가에 있습니까?
그리기 흐름
위의 막대 그래프를 그릴 때까지의 흐름입니다.
라이브러리 설치
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from io import StringIO
import numpy as np
%matplotlib inline
DataFrame 만들기
data = ('人数,性別,年齢\n'
'58,男性,18歳\n'
'25,男性,19歳\n'
'42,男性,20歳\n'
'60,女性,18歳\n'
'42,女性,19歳\n'
'70,女性,20歳\n'
)
df = pd.read_csv(StringIO(data), dtype={'人数':'int32'})
print(df)
↓
인원수
성별
나이
58
남성
18세
25
남성
19세
42
남성
20세
60
여성
18세
42
여성
19세
70
여성
20세
그래프 그리기
plt.rcParams['font.family'] = 'Yu Gothic' #Yu Gothicをデフォルト設定で日本語文字化けを回避
plt.rcParams['font.size'] = 20 #デフォルトのフォントサイズを設定
fig,ax = plt.subplots(1, 2, figsize=(24,10)) #1行、2列で横24インチ、縦10インチの描画スペースを作成
#matplotlibでの棒グラフ描画はdfのデータをちょっと分けます
labels = list(df['年齢'].unique()) #X軸のラベルに相当する場所をdfからリスト化
number_male = list(df['人数'].loc[0:2]) #dfの上から3行の人数の数値(男性の数値)をリスト化
number_female = list(df['人数'].loc[3:5]) #dfの下から3行の人数の数値(女性の数値)をリスト化
left = np.arange(len(number_male)) #X軸のラベルを貼り付ける座標を指定する用
print(left) #leftの中身は [0 1 2]
width = 0.4 #複数系列のグラフの場合はX軸ラベルの座標がleftのみだとずれるので、補正分
#matplotlibで棒グラフ
ax[0].bar(x=left, height=number_male, width=width, align='center', color='royalblue') #男性部分の棒グラフを追加
ax[0].bar(x=left+width, height=number_female, width=width, align='center', color='tomato') #女性部分の棒グラフを追加
ax[0].set_xticks(left + width / 2) #18歳、19歳、20歳部分の軸の位置を指定
ax[0].set_xticklabels(labels=labels) #"18歳、19歳、20歳"を描画するように指定
ax[0].set_xlabel('年齢') #X軸のラベル
ax[0].set_ylabel('人数') #Y軸のラベル
ax[0].legend(list(df['性別'].unique()), title='性別', loc='upper right') #凡例の男性、女性、タイトルを性別、位置を右上へ設定
ax[0].set_title('matplotlibで棒グラフ', size=30) #タイトルを設定
#seabornで棒グラフ
sns.barplot(data=df, x='年齢', y='人数', hue='性別', ax=ax[1], palette={'男性':'royalblue','女性':'tomato'}) #data=dfと指定して、XとYを設定、hue='性別'とすることで性別別で分けてくれる
ax[1].legend(loc='upper right', title='性別') #凡例のタイトル、位置を右上へ設定
ax[1].set_title('seabornで棒グラフ', size=30) #タイトルを設定
plt.savefig('グラフを描画してみた.png', bbox_inches='tight', pad_inches=0.3) #描画した画像を保存
plt.show() #描画
이제 여기 막대 그래프이 그려집니다.
행 수
matplotlib
8
seaborn
3
seaborn 쪽이 보기 때문에 편하게 그릴 수 있습니다! 코드는 범례와 타이틀로 2행이므로, 1행만으로 복수 계열의 막대 그래프를 쓸 수 있군요.
Reference
이 문제에 관하여(【그래프 그리기】 복수 계열의 막대 그래프를 matplotlib와 seaborn으로 써 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nijigen_plot/items/e3c0fa18911271170c90
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
위의 막대 그래프를 그릴 때까지의 흐름입니다.
라이브러리 설치
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from io import StringIO
import numpy as np
%matplotlib inline
DataFrame 만들기
data = ('人数,性別,年齢\n'
'58,男性,18歳\n'
'25,男性,19歳\n'
'42,男性,20歳\n'
'60,女性,18歳\n'
'42,女性,19歳\n'
'70,女性,20歳\n'
)
df = pd.read_csv(StringIO(data), dtype={'人数':'int32'})
print(df)
↓
인원수
성별
나이
58
남성
18세
25
남성
19세
42
남성
20세
60
여성
18세
42
여성
19세
70
여성
20세
그래프 그리기
plt.rcParams['font.family'] = 'Yu Gothic' #Yu Gothicをデフォルト設定で日本語文字化けを回避
plt.rcParams['font.size'] = 20 #デフォルトのフォントサイズを設定
fig,ax = plt.subplots(1, 2, figsize=(24,10)) #1行、2列で横24インチ、縦10インチの描画スペースを作成
#matplotlibでの棒グラフ描画はdfのデータをちょっと分けます
labels = list(df['年齢'].unique()) #X軸のラベルに相当する場所をdfからリスト化
number_male = list(df['人数'].loc[0:2]) #dfの上から3行の人数の数値(男性の数値)をリスト化
number_female = list(df['人数'].loc[3:5]) #dfの下から3行の人数の数値(女性の数値)をリスト化
left = np.arange(len(number_male)) #X軸のラベルを貼り付ける座標を指定する用
print(left) #leftの中身は [0 1 2]
width = 0.4 #複数系列のグラフの場合はX軸ラベルの座標がleftのみだとずれるので、補正分
#matplotlibで棒グラフ
ax[0].bar(x=left, height=number_male, width=width, align='center', color='royalblue') #男性部分の棒グラフを追加
ax[0].bar(x=left+width, height=number_female, width=width, align='center', color='tomato') #女性部分の棒グラフを追加
ax[0].set_xticks(left + width / 2) #18歳、19歳、20歳部分の軸の位置を指定
ax[0].set_xticklabels(labels=labels) #"18歳、19歳、20歳"を描画するように指定
ax[0].set_xlabel('年齢') #X軸のラベル
ax[0].set_ylabel('人数') #Y軸のラベル
ax[0].legend(list(df['性別'].unique()), title='性別', loc='upper right') #凡例の男性、女性、タイトルを性別、位置を右上へ設定
ax[0].set_title('matplotlibで棒グラフ', size=30) #タイトルを設定
#seabornで棒グラフ
sns.barplot(data=df, x='年齢', y='人数', hue='性別', ax=ax[1], palette={'男性':'royalblue','女性':'tomato'}) #data=dfと指定して、XとYを設定、hue='性別'とすることで性別別で分けてくれる
ax[1].legend(loc='upper right', title='性別') #凡例のタイトル、位置を右上へ設定
ax[1].set_title('seabornで棒グラフ', size=30) #タイトルを設定
plt.savefig('グラフを描画してみた.png', bbox_inches='tight', pad_inches=0.3) #描画した画像を保存
plt.show() #描画
이제 여기 막대 그래프이 그려집니다.
행 수
matplotlib
8
seaborn
3
seaborn 쪽이 보기 때문에 편하게 그릴 수 있습니다! 코드는 범례와 타이틀로 2행이므로, 1행만으로 복수 계열의 막대 그래프를 쓸 수 있군요.
Reference
이 문제에 관하여(【그래프 그리기】 복수 계열의 막대 그래프를 matplotlib와 seaborn으로 써 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nijigen_plot/items/e3c0fa18911271170c90텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)