簡體   English   中英

如何在Seaborn Lmplot FacetGrid中設置一些xlim和ylim

[英]How to set some xlim and ylim in Seaborn lmplot facetgrid

我正在使用Seaborn的lmplot繪制線性回歸,將我的數據集分為兩個類別變量。

對於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?

lmplot函數返回FacetGrid實例。 該對象有一個名為set的方法,您可以將key=value對傳遞給該方法,並且將在網格中的每個Axes對象上設置它們。

其次,您可以通過為要保留為默認值的值傳遞None來在matplotlib中僅設置軸限制的一側。

放在一起,我們有:

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

在此處輸入圖片說明

您需要掌握軸本身。 也許最干凈的方法是更改​​最后一行:

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

然后,您可以獲取axes對象(坐標軸數組):

axes = lm.axes

之后,您可以調整軸屬性

axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)

創建:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM