Seaborn Objects无法设置统一标题,子图各显标题求解决方案
解决Seaborn Objects分面图全局标题问题
在Seaborn Objects框架中,.label(title=...)会为每个分面子图单独添加标题,要设置统一的全局标题,无需使用.share(label=True),可通过以下两种符合框架要求的方法实现:
方法1:通过.theme()配置全局标题
直接在链式调用中用.theme()设置全局标题,还能同步调整标题样式:
( so.Plot(df, x="sepal_length", y="sepal_width") .add(so.Dot(alpha=.5, pointsize=1), col=None) .add(so.Dot(alpha=.5, pointsize=3, color='darkblue'), legend=False) .add(so.Line(color="r"), so.PolyFit(1)) .facet("species", wrap=2) .share(x=True, y=True) .theme(figure={"suptitle": {"text": "花萼长度与花萼宽度的散点图", "fontsize": 14}}) )
方法2:通过.on_plot()调用matplotlib全局标题接口
如果需要更灵活的位置调整(比如避免和子图标题重叠),可以用.on_plot()钩子调用matplotlib的suptitle:
( so.Plot(df, x="sepal_length", y="sepal_width") .add(so.Dot(alpha=.5, pointsize=1), col=None) .add(so.Dot(alpha=.5, pointsize=3, color='darkblue'), legend=False) .add(so.Line(color="r"), so.PolyFit(1)) .facet("species", wrap=2) .share(x=True, y=True) .on_plot(lambda p: p.figure.suptitle("花萼长度与花萼宽度的散点图", y=1.02, fontsize=14)) )
说明
.label(title=...)的作用是为每个子图设置标题,而全局标题需要依赖matplotlib的suptitle实现,上述两种方法均未脱离Seaborn Objects框架,可直接集成到链式调用中。
内容的提问来源于stack exchange,提问作者Pritom Roy
相关产品推荐
相关产品推荐

