【python】seabornで系列数が多い時にハイライト表示したグラフが描けるライブラリを作りました
2023.10.01 更新
より使いやすく修正したものを公開しています。最新版はこちらの記事をご覧ください。
概要
pythonでグラフを描くとき、私はよくseabornを使っています。
seabornではhue
を指定するだけでプロットの色を系列ごとに変えられて、簡単に見た目の整ったグラフを作ることができます🙌
ただし、系列が増えすぎると次のような課題が出てきます。
- 同じ色/近い色 の区別ができない
- 注目したい系列が目立たない
色が多くなり、パッと見て注目ポイントがわからない図
今回は、系列が多いときに一部の系列のみカラー表示とすることで、注目したい系列をハイライトさせるライブラリを作成しました。
2色(+灰色)にすることで、注目したいポイントが目立つようになった図
使い方
インストール、インポートの方法はリポジトリに説明を置いているのでそちらをご確認ください。
後は seabornでグラフを描く時と同じ要領で使用できます。
実行時の違いは highlights
にハイライトしたい項目を渡す という点のみです。
import seaborn as sns
df = sns.load_dataset('healthexp')
# 通常の場合 (seaborn)
sns.lineplot(data=df, x='Year', y='Life_Expectancy', hue='Country')
# ハイライトする場合 (shiroplot)
import shiroplot as splt
splt.lineplot(data=df, x='Year', y='Life_Expectancy', hue='Country',
highlights=['Japan', 'USA']) # <- この引数を追加
実装
やっていることは単純で、hue
を指定せずに1色でプロットした上に、ハイライトしたいデータだけをhue
指定ありで重ね書きしています。
sns.histplot
だけ、そのままやるとbin幅がずれることがあるので、指定がなければbins=10
を追加で指定するようにしています。
なお、現時点で対応しているのは以下3点のみです。
sns.scatterplot
sns.lineplot
sns.histplot
その他はsns.histplot
と同様の課題が生じるのですが、汎用的な対処方法が思いついていないため保留にしています。必要になった時に追加します。
あとがき
はじめての自作ライブラリ開発でした。
自分が書いたコードを人に見せる機会がほとんどないので、もしも「こうしたらもっと簡単に実装できるよ」など改善点があればコメントで教えていただけると泣いて喜びます。
今回やらなかったけど、今後は以下の内容も挑戦してみたいです。
- PyPIに登録
- テストの自動化
参考にした記事
Rの同様のパッケージ「gghighlight」
Pythonでライブラリを作る方法
自作OSSの公開にあたって (これをみてREADMEがんばった)
Discussion