🌊

【Python】データ可視化に使えるseabornまとめ

2023/05/21に公開

使用するライブラリ

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

データはすべて long-form の pd.DataFrame とする。

(おまけ) よく使う設定

sns.set_style('whitegrid') # darkgrid, whitegrid, dark, white
sns.set_context('talk') # paper < notebook < talk < poster
sns.set_palette('Set2')


パレットはこの中から選ぶことが多い。私は Set2 が好き。

グラフ選択チートシート

公式のチュートリアルにある下の図をもとに説明する。

上の3つが figure-level 関数で、その下にぶら下がっているのが axes-level 関数。

levels descriptions
figure-level - FacetGridを返す
- row, col を指定することで、簡単にsubplotが作れる
- kind でグラフのタイプを指定する。
axes-level - Axesを返す
- ax を指定することで、subplotに1つずつ割り当てられて自由度が高い

relplot 数量×数量 の2変数の関連

  • scatter 散布図
  • line 折れ線グラフ
    • 誤差範囲は、デフォルトではブートストラップ法による95%信用区間を表す。データが多いと時間がかかるため、不要であればci=Noneを指定して削除できる。[1]
Excelのグラフとの比較

上2つは、どちらもExcelの散布図に相当。
Excelの折れ線グラフは、x軸がカテゴリ変数として扱われるため、x軸の数値が等間隔でなくてもグラフ上では等間隔に表示される。
lineplot の場合はx軸も数量変数として扱われるため、これはExcelの場合の散布図で直線を表示した場合と似た挙動になる。

displot 数量変数のばらつき

relplotは2変数の値でグラフ上の各点の位置が決定される。
一方、displotは値ごとの出現回数を数えてプロットする。

  • hist ヒストグラム / (2変数) ヒートマップみたいな形式
  • kde カーネル密度推定グラフ / (2変数) 等高線 [2]
  • ecdf 累積分布関数グラフ [3]
  • rug 軸上の周辺分布。トゲみたいなやつ。
    • 単独では使わず、上3つと併用すること。
    • figure-level の場合、rug=Trueを指定すると追加で表示可能。

catplot カテゴリ変数

カテゴリ変数と言っているが、実態は上2つ以外が詰め込まれているように見える。

カテゴリ×数量 の2変数の関連

  • strip 散布図みたいなグラフ
    • jitter=True を指定することで、重なる点をランダムにずらしてくれる (デフォルトでTrue)
  • swarm 散布図みたいなグラフ
    • 重なる点を対称にずらしてくれる。

箱ひげ図

数量変数に対して使用する。
別の軸にカテゴリ変数を指定するとグループ化できる。hue に別の変数を指定すると入れ子にもできる。[4]

  • box 箱ひげ図
    • デフォルトは外れ値の主張が強いので、flierprops={"marker": "x"} を指定することでマーカーを変える。
  • violin カーネル密度推定グラフ
    • hue に指定した変数が2値であれば、split=True を指定することで人口ピラミッドみたいに左右半分ずつ表示できる。
  • boxen カクカクのカーネル密度推定グラフ

点推定値のプロット

  • point 折れ線グラフ
    • join=False を指定することで、ポイント間の線を消せる。
  • bar 棒グラフ
    • estimator に指定された関数で棒の長さが決定される。デフォルトは "mean"
    • 誤差バーはデフォルトで "-"型なので、capsize=.4 を指定することで "H"型にできる。
  • count 棒グラフ
    • 出現回数を数えてプロットする。

Figure-level 関数で使える引数

parameters descriptions defaults
row
col
subplot を作る時のグループ化の変数。同時指定も可能。
col_wrap col を指定した場合の、行方向の折り返し数。row と併用は不可。
row_order
col_order
subplot の順番
aspect 各subplot における、高さに対する横幅の比。1より大きければ横長になる。 1
sharex
sharey
軸のスケールを共有するか否か。"col" や "row" も指定可能。
facet_kws={'sharex': True, 'sharey': True} で指定する。
True

参考

https://seaborn.pydata.org/tutorial/function_overview.html
https://seaborn.pydata.org/api.html#function-interface

脚注
  1. 0.12.0以降は非推奨とのこと。代替手段がわからないのでとりあえずこのまま。 ↩︎

  2. kernel density estimates ↩︎

  3. empirical cumulative distribution functions ↩︎

  4. hue 指定なしの場合は自動的に別軸の変数で色分けされるっぽい。
    hue に同じ変数を指定すると二重にグループ化されて見づらくなるので、dodge=False を併せて指定する。そんなことしなくても、はじめから hue 指定なしでよい。 ↩︎

Discussion