【Python】FacetGridの使用方法|seaborn基礎

FacetGridの使用方法|seaborn基礎_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

seabornを使用すると、Pythonを使用してデータを可視化することができます。

本記事では、seabornによるFacetGridの使用方法について、詳しくご説明します。

こんな人に読んでほしい
  • Pythonを使用したデータの可視化方法を知りたい人
  • seabornによるFacetGridの使用方法を知りたい人
levtech-ad

seabornとは

seabornは、Pythonを使用してデータを可視化するための外部ライブラリの1つです。

データ可視化用ライブラリは他にも複数あり、その中でも特にMatplotlibが有名です。

seabornはMatplotlibをベースに作られており、Matplotlibの描画機能を利用しています。

seabornの長所は、Matplotlibよりも美しい図を、より少ないコードで簡単に描ける点です。

本記事では、seabornによるFacetGridの使用方法をご紹介します。

seabornのインストール

「seaborn」は、以下コマンドを入力することで、インストールすることができます。

コマンドの入力は、コマンドプロンプトあるいはターミナルから行います。

pip install seaborn

動作確認として、試しに以下を入力します。

import seaborn as sns

上記を入力してもエラーが発生しなければ、正常にインストールされています。

FacetGridの使用方法

seaborn.FacetGrid()関数を使用することで、FacetGridを使用することができます。

FacetGridとは、異なる水準で条件付けられた関係をプロットするためのマルチプロットグリッドのことです。

FacetGrid()関数の引数には、データセット、行データ、列データ等を指定します。

データセットの「tips」を用いて、FacetGridを使用してみます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
sns.FacetGrid(tips)
plt.show()
FacetGridの描画(seaborn_tips)

上グラフの通り、データセットのみの指定では何もプロットされません。

列変数や行変数を割り当てることで、サブプロットを追加することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
sns.FacetGrid(tips, col="time", row="sex")
plt.show()
FacetGridの描画(seaborn_tips_col_row)

関数とデータフレーム内の1つ以上の列の名前をFacetGrid.map()に渡すことで、すべてのファセットでプロットを描画することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time",  row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
plt.show()
FacetGridの描画(seaborn_tips_col_row_map)

FacetGrid.map_dataframe()を使用して、名前付き変数を代入することもできます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time",  row="sex")
g.map_dataframe(sns.histplot, x="total_bill")
plt.show()
FacetGridの描画(seaborn_tips_col_row_map_dataframe)

追加のキーワード引数を渡すことでビンの幅を同期することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.histplot, x="total_bill", binwidth=2, binrange=(0, 60))
plt.show()
FacetGridの描画(seaborn_tips_col_row_map_dataframe_binwidth=2)

hueを指定すると、カテゴリ別に描画できます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time", hue="sex")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.add_legend()
plt.show()
FacetGridの描画(seaborn_tips_col_row_map_dataframe_hue="sex")

FacetGrid.map_dataframe()にhueを指定することもできます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="sex")
g.add_legend()
plt.show()
FacetGridの描画(seaborn_tips_col_row_map_dataframe_hue="sex"_)

heightを指定すると、プロットの高さを変更することができます。

aspectを指定すると、プロットの幅(割合)を変更することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="day", height=3.5, aspect=.65)
g.map(sns.histplot, "total_bill")
plt.show()
FacetGridの描画(seaborn_tips_tips_col="day"_height=3.5_aspect=.65)

colに多くのレベルがある場合、複数の行にまたがるように変数を「ラップ」することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="size", height=2.5, col_wrap=3)
g.map(sns.histplot, "total_bill")
plt.show()
FacetGridの描画(seaborn_tips_tips_col="size"_height=2.5_col_wrap=3)

FacetGrid.refline()を使用することで、すべてのファセットに水平または垂直の基準線を追加することができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="time", margin_titles=True)
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.refline(y=tips["tip"].median())
plt.show()
FacetGridの描画(seaborn_tips_refline)

カスタム関数を渡すことで、プロットしたり、各ファセットに注釈を付けたりすることができます。

データ数を示す注釈をつけてみます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
import matplotlib.pyplot as plt
def annotate(data, **kws):
    n = len(data)
    ax = plt.gca()
    ax.text(.1, .6, f"N = {n}", transform=ax.transAxes)

g = sns.FacetGrid(tips, col="time")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.map_dataframe(annotate)
plt.show()
FacetGridの描画(seaborn_tips_annotate)

カスタム関数を渡すことで、プロットしたり、各ファセットに注釈を付けたりすることができます。

データ数を示す注釈をつけてみます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True)
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.set_axis_labels("Total bill ($)", "Tip ($)")
g.set_titles(col_template="{col_name} patrons", row_template="{row_name}")
g.set(xlim=(0, 60), ylim=(0, 12), xticks=[10, 30, 50], yticks=[2, 6, 10])
g.tight_layout()
g.savefig("facet_plot.png")
plt.show()
FacetGridの描画(seaborn_tips_label_title)

追加の調整のために、基になる matplotlib オブジェクトにもアクセスすることができます。

#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# データセットの読み込み
tips = sns.load_dataset("tips")

# FacetGridの指定・描画
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True, despine=False)
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.figure.subplots_adjust(wspace=0, hspace=0)
for (row_val, col_val), ax in g.axes_dict.items():
    if row_val == "Lunch" and col_val == "Female":
        ax.set_facecolor(".95")
    else:
        ax.set_facecolor((0, 0, 0, 0))
plt.show()
FacetGridの描画(seaborn_tips_追加調整)

まとめ

この記事では、seabornによるFacetGridの使用方法について、ご説明しました。

本記事を参考に、ぜひ試してみて下さい。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました