seaborn.FacetGrid.__init__#
- FacetGrid.__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
を直接使用することよりも、figureレベルの関数(例: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()
で解釈できるもの、または色相レベルをmatplotlibの色にマッピングする辞書である必要があります。- {row,col,hue}_orderリスト
ファセット変数のレベルの順序。デフォルトでは、
data
に出現するレベルの順序、または変数がpandasのカテゴリ変数の場合はカテゴリの順序になります。- hue_kwsparam → 値のリストのマッピング辞書
プロット呼び出しに挿入するその他のキーワード引数。これにより、他のプロット属性を色相変数のレベル間で変化させることができます(例:散布図のマーカー)。
- legend_out論理値
True
の場合、図のサイズが拡張され、凡例がプロットの外側(中央右)に描画されます。- despine論理値
プロットの上部と右側のスパインを削除します。
- margin_titles論理値
True
の場合、行変数のタイトルは最後の列の右側に描画されます。このオプションは実験的なものであり、すべての場合に機能するとは限りません。- {x, y}lim: タプル
各ファセットの各軸の制限(share{x, y}がTrueの場合のみ関連します)。
- subplot_kws辞書
matplotlib subplot(s)メソッドに渡されるキーワード引数の辞書。
- gridspec_kws辞書
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
パラメータを受け入れます。これを設定すると、別の変数に基づいてデータが条件付けされ、異なる色の複数のプロットが作成されます。可能な限り、ラベル情報は追跡され、単一の凡例を描画できます。g = sns.FacetGrid(tips, col="time", hue="sex") g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.add_legend()
FacetGrid
で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))