Seabornのlmplotを使用して線形回帰をプロットし、カテゴリ変数を使用してデータセットを2つのグループに分割しています。
Xとyの両方について、両方のプロットで下限を手動で設定しますが、上限はSeabornのデフォルトのままにします。以下に簡単な例を示します。
import pandas as pd
import seaborn as sns
import random
n = 200
random.seed(2014)
base_x = [random.random() for i in range(n)]
base_y = [2*i for i in base_x]
errors = [random.uniform(0,1) for i in range(n)]
y = [i+j for i,j in Zip(base_y,errors)]
df = pd.DataFrame({'X': base_x,
'Y': y,
'Z': ['A','B']*(n/2)})
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にアクセスするにはどうすればよいですか?
軸自体を把握する必要があります。おそらく最もクリーンな方法は、最後の行を変更することです:
lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)
次に、Axesオブジェクト(Axesの配列)を取得できます。
axes = lm.axes
その後、軸のプロパティを調整できます
axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)
作成:
lmplot
関数は、FacetGrid
インスタンスを返します。このオブジェクトにはset
というメソッドがあり、key=value
のペアを渡すことができます。これらのペアはグリッドの各Axesオブジェクトに設定されます。
次に、デフォルトとして残したい値にNone
を渡すことにより、matplotlibでAxes制限の片側のみを設定できます。
これらをまとめると、次のようになります。
g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))