1. ホーム
  2. python

[解決済み] Seaborn lmplot facetgrid で xlim と ylim を設定する方法

2022-10-08 10:44:03

質問

私は sns.lmplot を使って線形回帰をプロットし、データセットをカテゴリ変数で2つのグループに分割しています。

xとyの両方について、手動で 下限 を手動で設定したいが 上界 はSeabornのデフォルトのままにしておきます。 以下は簡単な例です。

import pandas as pd
import seaborn as sns
import numpy as np

n = 200
np.random.seed(2014)
base_x = np.random.rand(n)
base_y = base_x * 2
errors = np.random.uniform(size=n)
y = base_y + errors

df = pd.DataFrame({'X': base_x, 'Y': y, 'Z': ['A','B']*(100)})

mask_for_b = df.Z == 'B'
df.loc[mask_for_b,['X','Y']] = df.loc[mask_for_b,] *2

sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)

これは以下のように出力されます。

しかし、この例では、xlim と ylim は (0,*) にしたいのです。sns.plt.ylim と sns.plt.xlim を使ってみましたが、これらは右側のプロットにのみ影響します。 例です。

sns.plt.ylim(0,)
sns.plt.xlim(0,)

<イグ

FacetGridの各プロットのxlimとylimにアクセスするにはどうしたらよいでしょうか?

どのように解決するのですか?

この lmplot 関数は FacetGrid のインスタンスを返します。このオブジェクトは set というメソッドがあり、これに key=value のペアを渡すことができ、それらはグリッドの各 Axes オブジェクトに設定されます。

次に、matplotlibでAxesの制限の片側だけを設定するために None を渡すことで設定できます。

これらをまとめると

g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))

<イグ

更新情報

  • 位置決め引数。 sharexsharey は非推奨です。 seaborn 0.11
g = sns.lmplot(x='X', y='Y', data=df, col='Z', facet_kws={'sharey': False, 'sharex': False})
g.set(ylim=(0, None))