seaborn
記事
簡単な使い方
https://gyazo.com/97e07b335bfaa9d92f01a8612496dcdd
基本的に一番上のやつだけ使って kind= で指定
relplot / displot / catplot
どれも kind= でグラフの種類 & col= で横に並べられる
data, x, y, col, hue はよく指定する
col, row, hue の3つの軸で分けつつ複数グラフ同時に書ける
数値同士の関係見るなら relplot
カテゴリと値なら catplot
分布を見るなら displot
1行の各列の値ごとにヒストグラムにしたいことが多いので melt で縦持ちに整える → 縦持ち横持ち code:facet_hist.py
sns.displot(
kind='hist',
col='variable',
hue='label', # 重ねず行増やすなら row で
x='value',
bins=30,
kde=True,
# log_scale=True,
# facet_kws={'sharey': False, 'sharex': False},
)
これら + heatmap でだいたい済む
relational
sns.lineplot
sns.scatterplot
categorical
ヒストグラム
hue='col' で複数カラム重ねる
multiple='stack' で積み上げ
multiple='dodge' で横並べ
multiple='fill' で 積み上げ 100%
boxplot の区分多くするやつ
boxplot より複数のピークが見れてよい
四分位 + カーネル密度推定
えーこれ良いと思うんだけどな
他
ヒートマップ、dataframe で値域が一定でないと意味ないかな?
sns.heatmap(df.corr())
散布図 + 各軸にグラフ
sns.jointplot(data=df, x='x', y='y') が基本
hue='col' で col ごとに色分け
普段から relplot これでやってもいいか?
回帰線つける、あんまりつかわないか
regplot をカテゴリ別に重ねる、こっちのほうが使うかな
hue= 指定するだけ
列の2つのペアごとに可視化する、関係性を見る
sns.pairplot(df, corner=True) あたりをよく使いそうかな? 下半分でいいし
複数グラフ並べる、FacetGrid で group by を宣言して map で実際のグラフの表示を指定する
code:facetgrid.py
g = sns.FacetGrid(tips, col="time", row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
軸を共通にしないなら
sharex=False, sharey=False
凡例をグラフの外に出す
plt.legend(loc="upper left", bbox_to_anchor=(1, 1))
見た目
sns.set_style('whitegrid') が多いかな?
markers
複数列で hue
まあ結合して列を作って指定
時刻フォーマットがダルくなりがちなのでどうするか調べる
普通に dataframe の plot のほうがましだったりする
histplot
discrete=True
x 軸のラベルが棒グラフなどのまんなかに来る
shrink=0.8 などで横と隙間を開ける
stat='probability' で高さの合計を 1.0 に