【问题标题】:Seaborn FacetGrid plot two different y axis next to eachotherSeaborn FacetGrid 绘制两个相邻的不同 y 轴
【发布时间】:2019-03-10 14:47:20
【问题描述】:

这可行,但我确信一定有办法通过 FacetGrid 做到这一点。我想象某种参数,您可以在其中访问图表在网格上的位置。或者这可能被认为是多余的,使用 plt.subplots 是访问网格轴的方法。

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)
sns.catplot(x='not.fully.paid', y='int.rate', kind='box', data=loans, ax=ax1)
sns.catplot(x='not.fully.paid', y='fico', kind='box', data=loans, ax=ax2)

即使我调用它,它也会在显示屏上打印出来...

<seaborn.axisgrid.FacetGrid at 0x1a314b6c50>

当然,我的两个猫图彼此相邻,但下面是一个空的 facetgrid。

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    实际上令人惊讶的是,这段代码可以正常工作。 sns.catplot() 旨在绘制到 FacetGrid 上,并不打算按照您使用它的方式使用。

    我认为你应该直接使用sns.boxplot()

    fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)
    sns.boxplot(x='not.fully.paid', y='int.rate', kind='box', data=loans, ax=ax1)
    sns.boxplot(x='not.fully.paid', y='fico', kind='box', data=loans, ax=ax2)
    

    如果您真的想使用catplot,则必须转换您的数据框,以便所有 y 值都在一个列中,并有一个额外的类别列指示值的类型 (int.rate/fico) 和然后调用:

    sns.catplot(x='not.fully.paid', y='<values column>', col='<category column>', kind='box', data=loans)
    

    并且 seaborn 会自动正确的子图以适应您的类别列中唯一类别的数量。

    【讨论】:

    • 这确实摆脱了空的 FacetGrid,但是 FacetGrid 没有办法传递不同的绘图函数以及与这些函数关联的参数,更类似于 PairGrid 支持 map_diag 和 map_upper 的方式吗?
    • 不,FacetGrid 旨在将您的数据拆分为多个类别,并在所有类别中使用相同的绘图函数绘制相同的关系,以便于比较。
    • 啊,能够向 FacetGrid 传递 Y 值列表真是太酷了,但感谢您清除此问题
    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2018-12-09
    • 2015-06-17
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多