matplotlib Seaborn对象接口:自定义标题和方面与2个或更多的变量

3mpgtkmj  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在使用seaborn对象接口,我想在图形定制方面走得更远一点。下面是一个关于2个观察结果的小平面图的案例:

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)
)

如您所见,子图标题显示“种类:|kind:“.我想显示“kind:|face:“。
显然我尝试了title= 'kind :{}, face :{}'.format,但它抛出了一个错误。..
我发现.label(title= 'kind :{}'.format)会遍历facet观察输入,并做了一个快速而肮脏的解决方案。

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)
)

我想知道是否有更好的方法来做到这一点,而不需要检查观察值的值?

ozxc1zmp

ozxc1zmp1#

这可能不是你要找的。但是,对于二维Seaborn方面(列和行),如果您想避免定义自定义函数,在pandas中这样做似乎并不太糟糕。

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']
    )

df["kind_1"] = "kind: "+ df["kind"]
df["face_1"] = "face: "+ df["face"]

(
    so.Plot(df,x='Xs' , y='Ys')
    .facet("kind_1","face_1")
    .add(so.Dot())
)

相关问题