seabornにおけるhue

seabornでは、barplotやpointplotなど、多くの描画関数で「hue」という引数を取れる。

これは色相を表す英語。つまり色分けに使う。ベトナム阮朝の首都ではない。

例えば以下のような時に便利。

X軸・Y軸で2次元のグラフを描いた。ここにもう1次元を追加して情報量を増やしつつ、見やすさは維持したい。追加する次元がカテゴリカル(数値のような連続した値ではなく、性別のような分類的なデータ)で、せいぜい4~5分類程度なら、カテゴリ毎に色分けすることで、それを達成できる。

これを使いこなせると、1枚のグラフで示せることがぐっと広がるので、かっこいい。

pandasを一緒に使う際には、引数のdatapandas.DataFrameを渡し、x, y, hueにそれぞれのカラム名を指定するのが楽。

凡例の表記を変更

色分けしても、どの色が何を示すのかの凡例がないと、せっかくの見やすさも意味が伝わらず終わってしまう。

通常、自動的に、DataFrameに入っているカテゴリを示す値がそのまま使われる。

これを変更したいが、元のDataFrameは変えずに凡例だけ変えたい。

まぁ、ぶっちゃけ1カラムを凡例用に追加して、描画した後は消せばいい話ではあるんだけど。

一応以下の方法がある。

# グラフを描画したaxを取得
ax = sns.boxplot(x="day", y="total_bill", hue="sex", data=tips)

# 凡例のhandleを取得
handles, _ = ax.get_legend_handles_labels()

# ax.legend()の引数に、handleと、変更したい項目名を与える
# 与える順番の調べ方はわからんが、一度描いてみて表示された順でいいかな
ax.legend(handles, ["Man", "Woman"])