在 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
传递给sharey
和sharex
。
这条评论应该是被接受的答案^^
【参考方案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函数可视化山脊图(Ridgeline Plot with Seaborn)