【问题标题】:How to set some xlim and ylim in Seaborn lmplot facetgrid如何在 Seaborn lmplot facetgrid 中设置一些 xlim 和 ylim
【发布时间】:2014-10-02 11:50:36
【问题描述】:

我正在使用sns.lmplot 绘制线性回归,将我的数据集分成两组,使用一个分类变量。

对于 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?

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

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

    更新

    • 位置参数sharexshareyseaborn 0.11 开始已弃用
    g = sns.lmplot(x='X', y='Y', data=df, col='Z', facet_kws={'sharey': False, 'sharex': False})
    g.set(ylim=(0, None))
    

    【讨论】:

      【解决方案2】:

      您需要自己掌握轴。可能最干净的方法是更改​​最后一行:

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

      然后你就可以获得坐标轴对象(坐标轴数组):

      axes = lm.axes
      

      之后您可以调整坐标区属性

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

      创建:

      【讨论】:

        猜你喜欢
        • 2018-08-08
        • 2020-11-25
        • 2013-03-29
        • 2021-07-01
        • 2020-07-18
        • 1970-01-01
        • 1970-01-01
        • 2018-10-18
        相关资源
        最近更新 更多