seabornのcatplotを使った時に複数のグラフを重ねるやり方がすぐ分からなかったのでメモしておく
ついでにcatplotを使わない場合もメモ
実行環境
jupyter notebook
python 3.8
seaborn version 0.11.0
catplotを使わずにグラフを重ねる方法
まずcatplotを使わずにシンプルに重ねる方法
sns.boxplot(data=df, x=metrics, y='Group', orient='h', color='white')
sns.swarmplot(data=df, x=metrics, y='Group', orient='h', hue='Classification', size=pointsize, palette='Set2')
これはそのままグラフを描くコードを別々に書けば良い.
jupyterではこれで複数のグラフを重ねられる.(グラフの形状が似たようなものの場合)
今回はboxplotとswarmplotを重ねている.
jupyterでグラフを書き,plt.savefig('hoge.png')
で保存すると以下のようになる.
グラフを重ねることには成功.
しかしjupyterでは正しくグラフが表示されているが,そのまま保存するとlabelが見切れてしまった状態の画像が保存される.
これを直すためには
sns.boxplot(data=df, x=metrics, y='Group', orient='h', color='white')
sns.swarmplot(data=df, x=metrics, y='Group', orient='h', hue='Classification', size=pointsize, palette='Set2')
plt.tight_layout()
plt.savefig('hoge.png')
のように保存する前にplt.tight_layout
を使うか,
sns.boxplot(data=df, x=metrics, y='Group', orient='h', color='white')
sns.swarmplot(data=df, x=metrics, y='Group', orient='h', hue='Classification', size=pointsize, palette='Set2')
plt.savefig('hoge.png', bbox_inches='tight')
のように保存する時にbbox_inches='tight'
を渡すと以下のようにグラフ全体を保存することができる.
このように見切れていないグラフの画像を保存することができた.
catplotでグラフを重ねる方法
catplotを使って画像を保存したい場合,以下のようにcatplot
を2つ書くと2つのグラフが生成されてしまう.
sns.catplot(data=df, x=metrics, y='Group', orient='h', hue='Classification', size=8, kind='swarm')
sns.catplot(data=df, x=metrics, y='Group', orient='h', color='white', kind='box')
catplotでグラフを重ねたいときは以下のようにする.
g = sns.catplot(data=df, x=metrics, y='Group', orient='h', hue='Classification', size=8, kind='swarm')
g.map(sns.boxplot, data=df, x=metrics, y='Group', orient='h', color='white')
まず1行目は普通にcatplotで良い.
この時に返り値を受け取っておく.(ここではgとしている.seaborn.FaceGridが返ってくる)
続いて返り値(seaborn.FaceGrid)に重ねたいグラフをmapする.
例えばboxplotを重ねたいとき
sns.boxplot(data=df, x=metrics, y='Group', orient='h', color='white')
普通に書く場合は上記の書き方となるが,catplotに重ねる場合は
g.map(sns.boxplot, data=df, x=metrics, y='Group', orient='h', color='white')
のように第一引数に重ねたいグラフの名前(ここではsns.boxplot
),それ以降の引数にはグラフを書く時に引数として与えたい引数(ここではdata=df, x=metrics, y='Group', orient='h', color='white'
)を渡す.
このようにするとcatplotを重ねることができた.
catplotで作成した画像は以下のようになった.
参考
seaborn公式ドキュメント
https://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid