我正在使用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)
)
我想知道是否有更好的方法来做到这一点,而不需要检查观察值的值?
1条答案
按热度按时间ozxc1zmp1#
这可能不是你要找的。但是,对于二维Seaborn方面(列和行),如果您想避免定义自定义函数,在pandas中这样做似乎并不太糟糕。