在 seaborn facetgrid 的各个方面设置轴限制

Posted

技术标签:

【中文标题】在 seaborn facetgrid 的各个方面设置轴限制【英文标题】:set axis limits on individual facets of seaborn facetgrid 【发布时间】:2015-09-19 03:37:36 【问题描述】:

我正在尝试将 x 轴限制设置为 Seaborn facetgrid distplot 的每个方面的不同值。我知道我可以通过 g.axes 访问子图中的所有轴,因此我尝试遍历它们并将 xlim 设置为:

g = sns.FacetGrid(
    mapping,
    col=options.facetCol,
    row=options.facetRow,
    col_order=sorted(cols),
    hue=options.group,
)
g = g.map(sns.distplot, options.axis)

for i, ax in enumerate(g.axes.flat):  # set every-other axis for testing purposes
    if i % 2 == 0[enter link description here][1]:
        ax.set_xlim(-400, 500)
    else:
        ax.set_xlim(-200, 200)

但是,当我这样做时,所有轴都设置为 (-200, 200) 而不仅仅是其他方面。

我做错了什么?

【问题讨论】:

如果您希望轴有不同的限制,您需要将False 传递给shareysharex 这条评论应该是被接受的答案^^ 【参考方案1】:

mwaskom 有解决办法;为了完整起见,在此处发布 - 只需将以下行更改为:

g = sns.FacetGrid(
    mapping,
    col=options.facetCol,
    row=options.facetRow,
    col_order=sorted(cols),
    hue=options.group,
    sharex=False,  # <- This option solved the problem!
)

【讨论】:

当然 mwaskom 有解决方案...他是 seaborn 的作者 :)【参考方案2】:

正如mwaskom 所建议的,您可以简单地使用FacetGrid 的sharex(分别为sharey)来允许绘图具有独立的轴刻度:

sharex,y : bool、'col' 或 'row' 可选

如果为 true,则分面将跨列共享 y 轴和/或跨行共享 x 轴。

例如,用:

sharex=False 每个地块都有自己的轴 sharex='col'每一列都有自己的轴 sharex='row' 每行都有自己的轴(即使这对我来说没有太大意义)
sns.FacetGrid(data, ..., sharex='col')

如果您间接使用 FacetGrid,例如通过 displot 或 relplot,则必须使用 facet_kws 关键字参数:

sns.displot(data, ..., facet_kws='sharex': 'col')

【讨论】:

以上是关于在 seaborn facetgrid 的各个方面设置轴限制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 seaborn 的 facetgrid 中设置可读的 xticks?

在 seaborn 中的特定位置画一条线/注释 Facetgrid

在 Seaborn/其他库中聚合的 FacetGrid 图

seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)

Seaborn displot 'FacetGrid' 对象不可调用

如何反转 seaborn 图形级别图的轴(FacetGrid)