【seaborn】グラフの作成方法と主な使い方【まとめ】

グラフ作成には「matplotlib」と「seaborn」の二つがありますが、よく混合してしまうのでseabornについてまとめてみました。

忘れたときに見に行く場所として記録していきます。

この記事のサンプルコード

目次

ライブラリのインポート

お決まりのライブラリのインポートです。

import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
sns.set(font="IPAexGothic")
%matplotlib inline

japanize_matplotlibsns.set(font="IPAexGothic")は日本語フォントを扱う際に文字化け防止用として記入しています。

スタイルの設定

set_style()

seabornにはset_style("スタイル名")と見た目を変えることができます。
例えば、デフォルトでは

こんな感じで、sns.set("whitegrid")のようにすると

このようにデザインが変化します。

スタイル一覧

スタイル名背景グリッド線
darkgrid(デフォルト)あり
whitegridあり
darkなし
whiteなし
ticksなし, 軸に刻み線あり

折れ線グラフ

sns.lineplot()

引数説明
x, y(省略可)データフレームのカラム名
dataデータフレーム
hueカラムのカテゴリを異なる色で描画
styleカラムのカテゴリを異なる線種で描画
ci信頼区間の幅(デフォルト=95)で半透明のエラーバンドを表示
表示しない場合はNone
axグラフを描画したい領域(axesオブジェクトでの指定)

まずはデータの準備をします。
seabornに用意されているデータからロードしてグラフを作成してみます。

fmri = sns.load_dataset('fmri')
fmri.head()
subjecttimepointeventregionsignal
0s1318stimparietal-0.017552
1s514stimparietal-0.080883
2s1218stimparietal-0.081033
3s1118stimparietal-0.046134
4s1018stimparietal-0.037970

基本形

sns.lineplot(x="timepoint", y="signal", data=fmri)

信頼区間の非表示

引数:ci=Noneにて信頼区間を非表示に出来ます。

sns.lineplot(x="timepoint", y="signal", data=fmri, ci=None)

カテゴリ分類

sns.lineplot(x="timepoint", y="signal", data=fmri, hue="region")

引数:hue="region"でカテゴリ分類がされました。
色も分けられていていい感じですね。

sns.lineplot(x="timepoint", y="signal", data=fmri, hue="region", style="event")

hue, styleは同時に使えます。

棒グラフ

sns.barplot()

引数説明
x, y(省略可)データフレームのカラム名(xに数値型の変数、yにカテゴリ変数を指定した場合は横棒グラフを描画)
dataデータフレーム
order表示する並び(リストで指定)
hueカラムのカテゴリを異なる色で描画
ci信頼区間の幅(デフォルト=95)で半透明のエラーバンドを表示
表示しない場合はNone
axグラフを描画したい領域(axesオブジェクトでの指定)

下記データを準備しました。

tips = sns.load_dataset('tips')
tips.head()
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4

基本形

sns.barplot(x="day", y="total_bill", data=tips)

横棒グラフ

y軸にカテゴリ変数を指定した場合には、横棒グラフになります。

sns.barplot(x="tip", y="day", data=tips)

並び順と信頼区間の非表示

カテゴリの並び順はorder=[]とリストで指定し
信頼区間はci=Noneとします。

sns.barplot(x="total_bill", y="sex", data=tips, order=["Male","Female"], ci=None)

カテゴリ分類

折れ線グラフと同様にhue=""でカラムを指定します。

sns.barplot(x="day", y="total_bill", hue="sex", data=tips)

散布図

sns.scatterplot()

x, yの指定は必須です。

引数説明
x, yデータフレームのカラム名
dataデータフレーム
hueカラムのカテゴリを異なる色で描画
styleカラムのカテゴリを異なる線種で描画
sizeカラムのカテゴリを異なるサイズで描画
alpha透明度
axグラフを描画したい領域(axesオブジェクトでの指定)

データの準備をします。

iris = sns.load_dataset('iris')
iris.head()
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa

基本形

sns.scatterplot(x="sepal_length", y="sepal_width", data=iris)

x軸、y軸ともに数値データとなるため、引数:x,yの指定は必須です。

カテゴリ分類

hue—色
sns.scatterplot(x="sepal_length", y="sepal_width", data=iris, hue="species")
style—マーカー
sns.scatterplot(x="sepal_length", y="sepal_width", data=iris, style="species")
size—大きさ
sns.scatterplot(x="sepal_length", y="sepal_width", data=iris, size="species")
hue, sizeまとめて
sns.scatterplot(x="sepal_length", y="sepal_width", data=iris, hue="species", size="sepal_length")

散布図行列

sns.pairplot()

引数説明
dataデータフレーム
hueカラムのカテゴリを異なる色で描画
kind描画するグラフの種類 :scatter・reg
diag_kind対角線上に描画するグラフの種類 :hist・kde

基本形

sns.pairplot(data=iris)

カテゴリ分類

sns.pairplot(data=iris, hue="species")

描写するグラフの変更

sns.pairplot(data=iris, hue="species", kind="reg")

対角線グラフの種類の変更

sns.pairplot(data=iris, hue="species", diag_kind="hist")

箱ひげ図

sns.boxplot()

引数説明
x, y(省略可)描画対象のデータのカラム名
data描画対象のデータフレーム
order出力する順番(文字列のリストで指定)
hue指定したカラムのカテゴリでデータを分割し、グラフを描画
axグラフを描画したい領域(axesオブジェクトでの指定)

基本形

sns.boxplot(x="day", y="total_bill", data=tips)

カテゴリ分類

sns.boxplot(x="day", y="total_bill", data=tips, hue="sex")

ヒストグラム

sns.histplot()

引数説明
x, y(省略可)描画対象のデータのカラム名
data描画対象のデータフレーム
binビンの分割
stat各ビンで計算する統計法
・count
・frequency
・density
・probability
order出力する順番(文字列のリストで指定)
hue指定したカラムのカテゴリでデータを分割し、グラフを描画
axグラフを描画したい領域(axesオブジェクトでの指定)

基本形

sns.histplot(iris["sepal_width"])

ビンの指定

sns.histplot(iris["sepal_width"], bins=20)

カテゴリ分類

sns.histplot(iris, x="sepal_width", hue="species")

積上げヒストグラム

sns.histplot(iris, x="sepal_width", hue="species", multiple="stack")

カーネル密度推定の表示

sns.histplot(iris, x="sepal_width", hue="species", kde=True)

ヒートマップ

sns.heatmap()

引数説明
x, y(省略可)描画対象のデータのカラム名
dataデータフレーム
binビンの分割
annot数値の表示
linewidths各セルを分割する線の幅
axグラフを描画したい領域(axesオブジェクトでの指定)

データの準備をします。

flights = sns.load_dataset('flights')
flights.head()
yearmonthpassengers
01949Jan112
11949Feb118
21949Mar132
31949Apr129
41949May121

ヒートマップ作成のため、ピボットテーブルを作成します。

flights = flights.pivot("month", "year", "passengers")
flights
year194919501951195219531954195519561957195819591960
month
Jan112115145171196204242284315340360417
Feb118126150180196188233277301318342391
Mar132141178193236235267317356362406419
Apr129135163181235227269313348348396461
May121125172183229234270318355363420472
Jun135149178218243264315374422435472535
Jul148170199230264302364413465491548622
Aug148170199242272293347405467505559606
Sep136158184209237259312355404404463508
Oct119133162191211229274306347359407461
Nov104114146172180203237271305310362390
Dec118140166194201229278306336337405432

出来ました。

基本形

sns.heatmap(flights)

数値の表示

sns.heatmap(flights, annot=True, fmt="d")

間隔の調整

sns.heatmap(flights, linewidths=1)

相関変数の可視化

数値間の大小だけではなく、相関関係を確認する場合にも有効です。
値が1に近ければ近いほど、相関が強いということです。

sns.heatmap(iris.corr(), annot=True, linewidths=2)

この記事のサンプルコード

機械学習・データ処理を学ぶのにおすすめの教材

動画で学習するなら!

本気で取り組むならまずは相談!

じっくり書籍で学習するなら!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる