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.GridSpec
(matplotlib.figure.Figure.subplots()
経由)に渡されるキーワード引数の辞書。col_wrap
がNone
でない場合は無視されます。
参考
例
注意
これらの例では、クラスの高度な機能の一部を示すためにseaborn関数を使用していますが、ほとんどの場合、ここで示すプロットを作成するには、図レベルの関数(例:
displot()
、relplot()
)を使用することをお勧めします。コンストラクタを呼び出すには、ロングフォームのデータオブジェクトが必要です。これにより、グリッドが初期化されますが、何もプロットされません。
tips = sns.load_dataset("tips") sns.FacetGrid(tips)
列および/または行変数を割り当てて、図にさらにサブプロットを追加します。
sns.FacetGrid(tips, col="time", row="sex")
すべてのファセットにプロットを描画するには、関数とデータフレーム内の1つ以上の列の名前を
FacetGrid.map()
に渡します。g = sns.FacetGrid(tips, col="time", row="sex") g.map(sns.scatterplot, "total_bill", "tip")
FacetGrid.map()
の変数指定には位置引数マッピングが必要ですが、関数にdata
パラメータがあり、名前付き変数割り当てを受け入れる場合は、FacetGrid.map_dataframe()
を使用することもできます。g = sns.FacetGrid(tips, col="time", row="sex") g.map_dataframe(sns.histplot, x="total_bill")
各ファセットでビンの幅が異なることに注意してください。各ファセットに個別のプロットが描画されるため、プロット関数がデータからパラメータを導出する場合、それらはファセット間で共有されない可能性があります。追加のキーワード引数を渡して、それらを同期させることができます。ただし、可能な場合は、
displot()
のような図レベルの関数を使用すると、この管理が自動的に行われます。g = sns.FacetGrid(tips, col="time", row="sex") g.map_dataframe(sns.histplot, x="total_bill", binwidth=2, binrange=(0, 60))
FacetGrid
コンストラクタは、hue
パラメータを受け入れます。これを設定すると、別の変数でデータが条件付けられ、異なる色で複数のプロットが作成されます。可能な場合は、1つの凡例が描画できるように、ラベル情報が追跡されます。g = sns.FacetGrid(tips, col="time", hue="sex") g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.add_legend()
FacetGrid
でhue
が設定されている場合、変数の各レベルに対して個別のプロットが描画されます。プロット関数が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()
プロットのサイズと形状は、
height
およびaspect
パラメータを使用して、各サブプロットのレベルで指定されます。g = sns.FacetGrid(tips, col="day", height=3.5, aspect=.65) g.map(sns.histplot, "total_bill")
col
に割り当てられた変数に多くのレベルがある場合、それを「折り返して」複数の行にまたがらせることができます。g = sns.FacetGrid(tips, col="size", height=2.5, col_wrap=3) g.map(sns.histplot, "total_bill")
すべてのファセットに水平または垂直の参照線を追加するには、
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())
カスタム関数を渡して、プロットしたり、各ファセットに注釈を付けたりすることができます。カスタム関数は、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)
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")
さらに微調整するために、基になる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))
メソッド
__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])これらのインデックスで識別される軸をアクティブにして返します。
各ファセットの名前インデックスとデータサブセットのジェネレーター。
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
オブジェクト。