Python
seaborn

seabornのFacetGridとfactorplotについて

Pythonでのデータ視覚化の際に、seabornのfactorplotやFacetGridをよく用いるが、使い分けがイマイチ覚えられないので、まとめてみる。

seaborn.factorplot

  • 後述のFacetGridとcategorical plotを組み合わせた関数
  • デフォルトではpoint plotを描画するが、"kind"によりbox plot, violin plot, bar plot, strip plotを指定可能
  • グラフ要素どうしの距離が近いほど比較しやすいので、最も重要な比較は"hue"を用いるべき。二番目の比較には定量的な軸を共有すべき(垂直方向に並べるプロットなら"col", 水平方向なら"row")
  • 元のプロット関数を直接使う場合と違い、data frameはlong-formである必要(変数名を示す列と、値を示す列にまとめた形式。pandas.meltで変換可能)

主な引数

x, y, hue : 変数名
data : DataFrame
row, col : gridの作成に用いる変数名(optional)
col_wrap : int(optional)、列数を指定する
kind : {point, bar, count, box, violin, strip}、プロットの種類
share{x,y} : bool(optional)、x軸またはy軸を行内、列内で共有するか

コード例

公式ドキュメントを参照。
https://seaborn.pydata.org/generated/seaborn.factorplot.html

seaborn.FacetGrid

  • FacetGridはPandas DataFrameを特定の構造でmatplotlib figureと結びつけるオブジェクト
  • ある変数の異なる水準で条件付けられた同じ関係を表す複数の軸のプロットを描くために用いられる。グリッドの行、列に変数を対応させ、プロットの要素に異なる色を用いることで、最大で3つの変数による条件づけが可能

<基本的な流れ>
datasetとグリッドを構成する変数でFacetGridオブジェクトを初期化
→ FacetGrid.map()またはFacetGrid.map_dataframe()によりそれぞれのサブセットにプロット関数を適用

主な引数

data : (long-formの)DataFrame
row, col, hue : strings、グリッドの各部に描かれるデータのサブセットを決定する変数
col_wrap : int(optional)、列数を指定する
share{x,y} : bool(optional)、x軸またはy軸を行内、列内で共有するか

コード例

公式ドキュメントを参照。
https://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid

こちらも参考になる。
https://seaborn.pydata.org/tutorial/categorical.html
https://seaborn.pydata.org/tutorial/axis_grids.html

※ 棒グラフを作成する場合
factorplot()を用いるとfacet上の変数の順序の一致が保証されるので、FacetGridを直接用いるよりも安全。