🎨

【python】seabornで系列数が多い時にハイライト表示したグラフが描けるライブラリ Vol.2

2023/10/01に公開

はじめに

以前、Rのgghighlightというパッケージを真似てpython用のライブラリを作ったんですが(下記記事を参照)、使いづらいところがあったのでいくつか修正して新しいパッケージとして整理しました。

https://zenn.dev/shiro46/articles/0b1df96a1bab7a

パッケージの概要

pythonのseabornを使ってグラフを描く時に、hue引数を指定すると系列を簡単に分けられるのですが、数が増えすぎると見づらくなることがあります。


色が多くなり、パッと見て注目ポイントがわからない図

今回は、系列が多いときに一部の系列のみカラー表示とすることで、注目したい系列をハイライトさせるライブラリを作成しました。

2色(+灰色)にすることで、注目したいポイントが目立つようになった図

使い方

pipでインストールします。

pip install plot-highlight

後は seabornでグラフを描く時と同じ要領で使用できます。
実行時の違いは highlightsにハイライトしたい項目を渡す という点のみです。

import seaborn as sns
import plot_highlight as phl  # Plot HighLight

df = sns.load_dataset('healthexp')

# 通常の場合
# sns.lineplot(data=df, x='Year', y='Life_Expectancy', hue='Country')

# ハイライトする場合
phl.lineplot(data=df, x='Year', y='Life_Expectancy', hue='Country',
	highlights=['Japan', 'USA']) # <- この引数を追加

実装

グラフを描く関数を呼び出したときに、ハイライトする項目とその他の項目でDataFrameを分けて、それぞれについてグラフ関数を呼び出ししています。
ハイライトしない項目は、すべて同じ色のリストを渡してあげることで、ハイライトしたい項目が目立つようにします。

https://github.com/shiro46mt/plot-highlight/blob/main/plot_highlight/highlightplot.py#L9-L55

なお、現時点で対応しているのは以下3点のみです。

  • sns.scatterplot
  • sns.lineplot
  • sns.histplot

前回からの変更点

  • ハイライトしない系列についても、グループ分けは実施
    lineplotでハイライトしない系列が1つに集約される仕様を修正した。

  • PyPIに登録
    別記事にあんちょこ作った。

https://zenn.dev/shiro46/articles/22d9898bcfac48

Discussion