0
0

More than 1 year has passed since last update.

seaborn.relplot() でFacetごとに複数カテゴリ(色)をプロットする

Posted at

複数のカテゴリをFacet内でひとまとめにする

Pythonのグラフ描画ライブラリseabornのメソッドrelplot()の引数colraw
異なるカテゴリのプロットを表形式でまとめるられるのですが、
カテゴリ数 = Facet数が増えると幅が長くなりすぎるという問題があります。

col_3.png

その対策として、この記事では画像の右の列のように
1つのFacet内に複数カテゴリのプロットを実現する方法を紹介します。

普通にやってみる

例として有名なirisデータセットをプロットしてみます。
col hue ともに species を選択すると以下の画像のようになります。
(この場合はhueで色分けする意味があまりないですが…)

import seaborn as sns

df = sns.load_dataset('iris') # speciesは3種類

sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='species',
    hue='species'
    )

col_1.png

カテゴリ(色)をまとめるための列を作成

本題に入ります。
speciesの違いは色分けすればわかるので
versicolorvirginicaをひとまとめにすることを考えます。

そのために、df内に新しい列col_facetを置換辞書から生成しましょう。
するとcol_facetに対応するspiecesがすべて1つのFacet内にプロットされるようになります。

なおFacetの順番はcol_orderで設定できます。

# replace()でspecies列を L または R に置換した列を新規に作成
df['col_facet'] = df['species'].replace(
    {
        'setosa': 'L',
        'versicolor': 'R',
        'virginica': 'R'
    }
)

sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='col_facet',  #列を変更
    col_order=['L', 'R'],  #新規に指定
    hue='species'
    )

col_2.png

うまくいっています。

余談ですが、まとめた後のFacet数も数がある場合は
置換辞書dの置換先に0以上の整数を指定して

sns.relplot(
    col_order=list(range(max(d.values()))
)  #他の引数は省略

などとするとよいでしょう。

表題を削除

col_facetでまとめたカテゴリに特段の意味がない場合には
col_facet = Lのような表題は必要ないと思います。

表題を一様に削除するには、
relplot()の戻り値であるFacetGridのメソッドset_titles()を以下のように設定します。

g = sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='col_facet',
    col_order=['L', 'R'],
    hue='species'
    )
# 全タイトルを空文字列に設定
g.set_titles(col_template='')

col_3.png

これで表題を消すことができました。

参考

0
0
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
0
0