seaborn.FacetGrid#

class seaborn.FacetGrid(data, *, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=False, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None)#

条件付き関係をプロットするための複数プロットグリッド。

__init__(data, *, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=False, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None)#

matplotlibのfigureとFacetGridオブジェクトを初期化します。

このクラスは、データセットを、データセット内の変数のレベルに対応する行と列のグリッドに配置された複数の軸にマッピングします。それが生成するプロットは、「格子」、「トレリス」、または「スモールマルチプル」グラフィックスと呼ばれることがよくあります。

また、hueパラメーターを使用して3番目の変数のレベルを表すこともできます。これにより、データの異なるサブセットが異なる色でプロットされます。これは、色を使用して3次元の要素を解決しますが、サブセットを互いに重ねて描画するだけで、hueを受け入れる軸レベル関数がhueを特定の視覚化に合わせるのとは異なります。

基本的なワークフローは、まずデータセットとグリッドの構造を決定する変数でFacetGridオブジェクトを初期化することです。次に、FacetGrid.map()またはFacetGrid.map_dataframe()を呼び出すことで、各サブセットに1つ以上のプロット関数を適用できます。最後に、軸ラベルの変更、異なる目盛りの使用、凡例の追加などのために、他のメソッドでプロットを調整できます。詳細については、以下のコード例を参照してください。

警告

データセットから意味マッピングを推測するseaborn関数を使用する場合、ファセット間でそれらのマッピングを同期させる必要があります(たとえば、hueマッピングをパレット辞書で定義するか、変数のデータ型をcategoryに設定するなど)。ほとんどの場合、FacetGridを直接使用するよりも、図レベルの関数(例:relplot()またはcatplot())を使用する方が良いでしょう。

詳細については、チュートリアルを参照してください。

パラメータ:
dataDataFrame

各列が変数で、各行が観測値である整然とした(「ロングフォーム」)データフレーム。

row, col, hue文字列

データのサブセットを定義する変数。これらはグリッド内の別々のファセットに描画されます。{var}_orderパラメータを使用して、この変数のレベルの順序を制御します。

col_wrap整数

列変数をこの幅で「折り返し」て、列のファセットが複数の行にまたがるようにします。rowファセットとは互換性がありません。

share{x,y}bool, 'col', または 'row' (オプション)

trueの場合、ファセットは列間でy軸、行間でx軸を共有します。

heightスカラー

各ファセットの高さ(インチ単位)。aspectも参照してください。

aspectスカラー

各ファセットのアスペクト比。aspect * heightで各ファセットの幅(インチ単位)が得られます。

paletteパレット名、リスト、または辞書

hue変数の異なるレベルに使用する色。color_palette()で解釈できるもの、またはhueレベルをmatplotlibの色にマッピングする辞書である必要があります。

{row,col,hue}_orderリスト

ファセット変数のレベルの順序。デフォルトでは、dataにレベルが現れる順序、または変数がpandasのカテゴリカル型である場合はカテゴリの順序になります。

hue_kwsparam -> 値リストをマッピングする辞書

プロット呼び出しに挿入するその他のキーワード引数。これにより、hue変数のレベル間で他のプロット属性を変化させることができます(例:散布図のマーカー)。

legend_outbool

Trueの場合、図のサイズが拡張され、凡例がプロットの外側の右中央に描画されます。

despine真偽値

プロットから上部と右側のスパインを削除します。

margin_titlesbool

Trueの場合、行変数のタイトルは最後の列の右側に描画されます。このオプションは実験的であり、すべての場合に機能するとは限りません。

{x, y}lim: タプル

各ファセットの各軸の制限(share{x, y}がTrueの場合のみ関連します)。

subplot_kwsdict

matplotlib subplot()メソッドに渡されるキーワード引数の辞書。

gridspec_kwsdict

matplotlib.gridspec.GridSpecmatplotlib.figure.Figure.subplots()経由)に渡されるキーワード引数の辞書。col_wrapNoneでない場合は無視されます。

参考

PairGrid

ペアワイズ関係をプロットするためのサブプロットグリッド

relplot

リレーショナルプロットとFacetGridを組み合わせる

displot

分布プロットとFacetGridを組み合わせる

catplot

カテゴリプロットとFacetGridを組み合わせる

lmplot

回帰プロットとFacetGridを組み合わせる

注意

これらの例では、クラスの高度な機能の一部を示すためにseaborn関数を使用していますが、ほとんどの場合、ここで示すプロットを作成するには、図レベルの関数(例:displot()relplot())を使用することをお勧めします。

コンストラクタを呼び出すには、ロングフォームのデータオブジェクトが必要です。これにより、グリッドが初期化されますが、何もプロットされません。

tips = sns.load_dataset("tips")
sns.FacetGrid(tips)
../_images/FacetGrid_1_0.png

列および/または行変数を割り当てて、図にさらにサブプロットを追加します。

sns.FacetGrid(tips, col="time", row="sex")
../_images/FacetGrid_3_0.png

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

g = sns.FacetGrid(tips, col="time",  row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
../_images/FacetGrid_5_0.png

FacetGrid.map()の変数指定には位置引数マッピングが必要ですが、関数にdataパラメータがあり、名前付き変数割り当てを受け入れる場合は、FacetGrid.map_dataframe()を使用することもできます。

g = sns.FacetGrid(tips, col="time",  row="sex")
g.map_dataframe(sns.histplot, x="total_bill")
../_images/FacetGrid_7_0.png

各ファセットでビンの幅が異なることに注意してください。各ファセットに個別のプロットが描画されるため、プロット関数がデータからパラメータを導出する場合、それらはファセット間で共有されない可能性があります。追加のキーワード引数を渡して、それらを同期させることができます。ただし、可能な場合は、displot()のような図レベルの関数を使用すると、この管理が自動的に行われます。

g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.histplot, x="total_bill", binwidth=2, binrange=(0, 60))
../_images/FacetGrid_9_0.png

FacetGridコンストラクタは、hueパラメータを受け入れます。これを設定すると、別の変数でデータが条件付けられ、異なる色で複数のプロットが作成されます。可能な場合は、1つの凡例が描画できるように、ラベル情報が追跡されます。

g = sns.FacetGrid(tips, col="time", hue="sex")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
g.add_legend()
../_images/FacetGrid_11_0.png

FacetGridhueが設定されている場合、変数の各レベルに対して個別のプロットが描画されます。プロット関数がhueを理解している場合は、そのロジックを処理させる方が良いでしょう。ただし、各ファセットが同じhueマッピングを使用するようにすることが重要です。サンプルtipsデータでは、sex列はカテゴリカルデータ型であるため、これが保証されます。それ以外の場合は、hue_orderまたは類似のパラメータを使用する必要がある場合があります。

g = sns.FacetGrid(tips, col="time")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="sex")
g.add_legend()
../_images/FacetGrid_13_0.png

プロットのサイズと形状は、heightおよびaspectパラメータを使用して、各サブプロットのレベルで指定されます。

g = sns.FacetGrid(tips, col="day", height=3.5, aspect=.65)
g.map(sns.histplot, "total_bill")
../_images/FacetGrid_15_0.png

colに割り当てられた変数に多くのレベルがある場合、それを「折り返して」複数の行にまたがらせることができます。

g = sns.FacetGrid(tips, col="size", height=2.5, col_wrap=3)
g.map(sns.histplot, "total_bill")
../_images/FacetGrid_17_0.png

すべてのファセットに水平または垂直の参照線を追加するには、FacetGrid.refline()を使用します。

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())
../_images/FacetGrid_19_0.png

カスタム関数を渡して、プロットしたり、各ファセットに注釈を付けたりすることができます。カスタム関数は、matplotlibの状態マシンインターフェイスを使用して「現在の」軸にプロットする必要があり、追加のキーワード引数をキャッチする必要があります。

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)
../_images/FacetGrid_21_0.png

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")
../_images/FacetGrid_23_0.png

さらに微調整するために、基になるmatplotlibオブジェクトにもアクセスできます。

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))
../_images/FacetGrid_25_0.png

メソッド

__init__(data, *[, row, col, hue, col_wrap, ...])

matplotlibのfigureとFacetGridオブジェクトを初期化します。

add_legend([legend_data, title, ...])

凡例を描画します。場合によっては軸の外側に配置し、図のサイズを変更します。

apply(func, *args, **kwargs)

グリッドをユーザー提供の関数に渡し、selfを返します。

despine(**kwargs)

ファセットから軸のスパインを削除します。

facet_axis(row_i, col_j[, modify_state])

これらのインデックスで識別される軸をアクティブにして返します。

facet_data()

各ファセットの名前インデックスとデータサブセットのジェネレーター。

map(func, *args, **kwargs)

各ファセットのデータサブセットにプロット関数を適用します。

map_dataframe(func, *args, **kwargs)

.mapと同様ですが、引数を文字列として渡し、kwargsにデータを挿入します。

pipe(func, *args, **kwargs)

グリッドをユーザー提供の関数に渡し、その値を返します。

refline(*[, x, y, color, linestyle])

各ファセットに基準線を追加します。

savefig(*args, **kwargs)

プロットの画像を保存します。

set(**kwargs)

各サブプロット軸に属性を設定します。

set_axis_labels([x_var, y_var, clear_inner])

グリッドの左列と下行に軸ラベルを設定します。

set_titles([template, row_template, ...])

各ファセットの上またはグリッドの余白にタイトルを描画します。

set_xlabels([label, clear_inner])

グリッドの下行にx軸のラベルを付けます。

set_xticklabels([labels, step])

グリッドのx軸の目盛りラベルを設定します。

set_ylabels([label, clear_inner])

グリッドの左列にy軸のラベルを付けます。

set_yticklabels([labels])

グリッドの左列にy軸の目盛りラベルを設定します。

tick_params([axis])

目盛り、目盛りラベル、およびグリッド線を変更します。

tight_layout(*args, **kwargs)

凡例を除外する領域内でfig.tight_layoutを呼び出します。

属性

ax

ファセット変数が割り当てられていない場合のmatplotlib.axes.Axes

axes

グリッド内のmatplotlib.axes.Axesオブジェクトの配列。

axes_dict

ファセット名と対応するmatplotlib.axes.Axesのマッピング。

fig

非推奨: figureプロパティを使用してください。

figure

グリッドの基になるmatplotlib.figure.Figureオブジェクトにアクセスします。

legend

存在する場合、matplotlib.legend.Legendオブジェクト。