You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn Object Interface多变量分面图自定义子图标题方法

如何在Seaborn Object Interface的多变量分面图中自定义子图标题

我用Seaborn Object Interface绘制双变量分面图时,子图标题统一显示为kind: ,想要改成对应变量的名称(比如kind: A、face: odd这类)。尝试用带两个参数的format方法报错,目前靠判断观测值实现了需求,但想找不用判断观测值的更优方法。

原错误代码

import pandas as pd
import numpy as np
import seaborn.objects as so

df = pd.DataFrame(
    np.array([['A','B','A','B'],['odd','odd','even','even'], [1,2,1,2], [2,4,1.5,3],]).T
    , columns= ['kind','face','Xs','Ys']
)
(
    so.Plot(df,x='Xs' , y='Ys')
    .facet("kind","face")
    .add(so.Dot())
    .label(title= 'kind :{}'.format)
)

临时解决方案(依赖观测值判断)

import pandas as pd
import numpy as np
import seaborn.objects as so

df = pd.DataFrame(
    np.array([['A','B','A','B'],['odd','odd','even','even'], [1,2,1,2], [2,4,1.5,3],]).T
    , columns= ['kind','face','Xs','Ys']
)
def multiObs_facet_title(t:tuple) -> str:
    if t in ['A','B']:
        return 'kind: {}'.format(t)
    else:
        return 'face: {}'.format(t)
(
    so.Plot(df,x='Xs' , y='Ys')
    .facet("kind","face")
    .add(so.Dot())
    .label(title= multiObs_facet_title)
)

最优解决方案(无需判断观测值)

Seaborn Object Interface在多变量分面时,会把每个子图的变量名和对应取值以元组形式传给标题格式化函数。直接拆分这个元组就能生成通用的标题,不用依赖观测值判断:

import pandas as pd
import numpy as np
import seaborn.objects as so

df = pd.DataFrame(
    np.array([['A','B','A','B'],['odd','odd','even','even'], [1,2,1,2], [2,4,1.5,3],]).T
    , columns= ['kind','face','Xs','Ys']
)

def facet_title_formatter(facet_tuple):
    var_name, value = facet_tuple
    return f'{var_name}: {value}'

(
    so.Plot(df, x='Xs', y='Ys')
    .facet("kind", "face")
    .add(so.Dot())
    .label(title=facet_title_formatter)
)

说明

  • 多变量分面时,label(title=...)接收的函数会被传入(变量名, 取值)格式的元组
  • 拆分元组后直接拼接,不管变量或取值怎么变更,代码都能适配,完全通用

内容的提问来源于stack exchange,提问作者Julien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:01:37