LoginSignup
8
4

More than 3 years have passed since last update.

seabornで複数のグラフを重ねてプロットする

Posted at

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ではこれで複数のグラフを重ねられる.(グラフの形状が似たようなものの場合)

今回はboxplotswarmplotを重ねている.

jupyterでグラフを書き,plt.savefig('hoge.png')で保存すると以下のようになる.

casp14_gdtts_loss_group_boxplot.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'を渡すと以下のようにグラフ全体を保存することができる.

casp14_gdtts_loss_group_boxplot_tight.png

このように見切れていないグラフの画像を保存することができた.

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で作成した画像は以下のようになった.

casp14_gdtts_loss_group_boxplot_catplot.png

参考

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

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4