Python

Python seaborn チュートリアル マルチプロットグリッド プロット機能 構造化と構築 (3)

原文のドキュメントはこちらから。

ペアワイズデータの関係をプロット

PairGridでは、同じプロット・タイプを使って小さなサブプロットのグリッドを素早く描き、それぞれのデータを可視化できる。PairGridでは、各行と列が異なる変数に割り当てられているため、結果として得られるプロットは、データセット内の各ペアワイズ関係を示す。このスタイルのプロットは、各関係を表示する最も一般的な方法であるため、「散布図行列」と呼ばれることもあるが、PairGridは散布図に限定されない。

ここで重要なのは、FacetGridとPairGridの違いを理解することである。前者では、各ファセットは、他の変数の異なるレベルで条件付けされた同じ関係を示す。後者では、各プロットは異なる関係を示す(上の三角形と下の三角形はミラーリングされたプロットになるが)。PairGridを使うと、データセット内の興味深い関係の非常に素早く、非常にハイレベルな要約を得ることができる。

このクラスの基本的な使い方は、FacetGridと非常によく似ている。まずグリッドを初期化し、次にプロット関数をmapメソッドに渡し、各サブプロットで呼び出される。pairplot()というコンパニオン関数もあるが、これはより高速なプロットのための柔軟性と引き換えに、いくつかの機能を提供する。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map(sns.scatterplot)

plt.show()

各列の変数の一変量分布を示すために、対角線上に異なる関数をプロットできる。ただし、軸の目盛りは、このプロットのカウント軸や密度軸には対応しないことに注意が必要。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map_diag(sns.histplot)
g.map_offdiag(sns.scatterplot)

plt.show()

このプロットを使用する非常に一般的な方法は、オブザベーションを個別のカテゴリ変数で色分けすることである。たとえば、アヤメのデータセットは、3つの異なる種のアヤメの花のそれぞれについて4つの測定値を持っているため、それらがどのように異なるかを見ることができる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris, hue="species")
g.map_diag(sns.histplot)
g.map_offdiag(sns.scatterplot)
g.add_legend()

plt.show()

デフォルトでは、データセット内のすべての数値列が使用されるが、必要に応じて特定の関係に焦点を当てることができる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species")
g.map(sns.scatterplot)

plt.show()

また、上下の三角形で機能を使い分けて、それぞれの関係性を強調することも可能だ。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map_upper(sns.scatterplot)
g.map_lower(sns.kdeplot)
g.map_diag(sns.kdeplot, lw=3, legend=False)

plt.show()

対角線上に同一性関係を持つ正方形のグリッドは、実際には単なる特殊なケースであり、行と列で異なる変数を使ってプロットできる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

tips = sns.load_dataset("tips")
g = sns.PairGrid(tips, y_vars=["tip"], x_vars=["total_bill", "size"], height=4)
g.map(sns.regplot, color=".3")
g.set(ylim=(-1, 11), yticks=[0, 5, 10])

plt.show()

もちろん、美的属性は設定可能だ。例えば、別のパレットを使用して(例えば、色相変数の順序を表示するために)、キーワード引数をプロット関数に渡すことができる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

tips = sns.load_dataset("tips")
g = sns.PairGrid(tips, hue="size", palette="GnBu_d")
g.map(plt.scatter, s=50, edgecolor="white")
g.add_legend()

plt.show()

PairGridは柔軟性があるが、データセットを素早く見るにはpairplot()を使った方が簡単だ。この関数はデフォルトで散布図とヒストグラムを使うが、他にもいくつかの種類が追加される予定(現在は、対角線から外れた部分に回帰プロット、対角線上にKDEをプロットすることもできる)。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
sns.pairplot(iris, hue="species", height=2.5)

plt.show()

また、キーワード引数でプロットの美学を制御することもでき、さらに微調整するためにPairGridインスタンスを返す。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species", palette="Set2", diag_kind="kde", height=2.5)

plt.show()