seabornを使用すると、Pythonを使用してデータを可視化することができます。
本記事では、seabornによるJointGridの使用方法について、詳しくご説明します。
- Pythonを使用したデータの可視化方法を知りたい人
- seabornによるJointGridの使用方法を知りたい人
seabornとは
seabornは、Pythonを使用してデータを可視化するための外部ライブラリの1つです。
データ可視化用ライブラリは他にも複数あり、その中でも特にMatplotlibが有名です。
seabornはMatplotlibをベースに作られており、Matplotlibの描画機能を利用しています。
seabornの長所は、Matplotlibよりも美しい図を、より少ないコードで簡単に描ける点です。
本記事では、seabornによるJointGridの使用方法をご紹介します。
seabornのインストール
「seaborn」は、以下コマンドを入力することで、インストールすることができます。
コマンドの入力は、コマンドプロンプトあるいはターミナルから行います。
pip install seaborn
動作確認として、試しに以下を入力します。
import seaborn as sns
上記を入力してもエラーが発生しなければ、正常にインストールされています。
JointGridの使用方法
seaborn.JointGrid()関数を使用することで、JointGridを使用することができます。
JointGridとは、単変量プロットを使用して二変量プロットを描画するためのグリッドのことです。
JointGrid()関数の引数には、データセット、行データ、列データ等を指定します。
データセットの「penguins」を用いて、JointGridを使用してみます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
plt.show()

上グラフの通り、コンストラクターを呼び出すだけでは何もプロットされません。
JointGrid.plot()に一対の関数 (メインプロットとサブプロットの関数) を指定することで、プロットすることができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
g.plot(sns.scatterplot, sns.histplot)
plt.show()

JointGrid.plot()には、追加のキーワード引数を指定することができます。
JointGrid.plot()で指定したキーワード引数は、両方の関数に渡されます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
g.plot(sns.scatterplot, sns.histplot, alpha=.3, edgecolor=".1", linewidth=.8)
plt.show()

JointGrid.plot_joint()に加え、JointGrid.plot_marginals()を呼び出すことで、各関数に異なるキーワード引数を渡すことができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
g.plot_joint(sns.scatterplot, s=100, alpha=.3, color="green")
g.plot_marginals(sns.histplot, kde=True, color="red")
plt.show()

データを割り当てずにグリッドを設定することもできます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid()
plt.show()

matplotlib.axes.Axesオブジェクトであるax_joint、ax_marg_x、ax_marg_yにアクセスし、プロットすることもできます
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid()
x, y = penguins["bill_length_mm"], penguins["bill_depth_mm"]
sns.scatterplot(x=x, y=y, ec="r", fc="none", s=100, linewidth=1.5, ax=g.ax_joint)
sns.histplot(x=x, fill=False, linewidth=2, ax=g.ax_marg_x, color="yellow")
sns.kdeplot(y=y, linewidth=2, ax=g.ax_marg_y, color="blue")
plt.show()

プロットメソッドでは、変数xおよびyを受け入れる任意のseaborn関数を使用できます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
g.plot(sns.regplot, sns.boxplot)
plt.show()

hueを指定すると、カテゴリ別に描画できます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm", hue="species")
g.plot(sns.scatterplot, sns.histplot)
plt.show()

JointGrid.refline()を使用することで、すべてのファセットに水平または垂直の基準線を追加することができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
g = sns.JointGrid(data=penguins, x="bill_length_mm", y="bill_depth_mm")
g.plot(sns.scatterplot, sns.histplot)
g.refline(x=45, y=16)
plt.show()

Figure は (matplotlib レイヤーでサイズを変更しない限り) 常に正方形ですが、全体のサイズとレイアウトは変更可能です。
heightでサイズを、ratioでジョイント軸とマージン軸の間の相対比を、spaceでプロット間のスペースを指定することができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
sns.JointGrid(height=4, ratio=2, space=.05)
plt.show()

marginal_ticks=Trueとすることで、周辺プロットの密度軸の目盛りを表示することができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
sns.JointGrid(marginal_ticks=True)
plt.show()

Figureを設定するときに、縦横のデータ軸の上限・下限も定義することができます。
#input
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# データセットの読み込み
penguins = sns.load_dataset("penguins")
# JointGridの指定・描画
sns.set_style("darkgrid")
sns.JointGrid(xlim=(-2, 5), ylim=(0, 10))
plt.show()

まとめ
この記事では、seabornによるJointGridの使用方法について、ご説明しました。
本記事を参考に、ぜひ試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!