一尘不染

添加条形标签会缩小 seaborn.objects 中的闪避条形

py

我正在尝试使用seaborn.objects将文本标签添加到分组/闪避条形图的顶部。

这是一个基本的闪避条形图:

import seaborn.objects as so
import pandas as pd

dat = pd.DataFrame({'group':['a','a','b','b'],
                    'x':['1','2','1','2'],
                   'y':[3,4,1,2]})

(so.Plot(dat, x = 'x', y = 'y', color = 'group')
 .add(so.Bar(),so.Dodge()))

躲避条形图

我可以使用 将文本标签添加到非闪避条形图的顶部so.Text(),没问题。

(so.Plot(dat.query('group == "a"'), x = 'x', y = 'y', text = 'group')
 .add(so.Bar())
 .add(so.Text({'va':'bottom'})))

带文本标签的条形图

但是,当我将闪避与文本结合使用时,条形会缩小并移动得很远。

(so.Plot(dat.query('group == "a"'), x = 'x', y = 'y', text = 'group')
 .add(so.Bar())
 .add(so.Text({'va':'bottom'})))

带有看起来很糟糕的文本标签的闪避条形图

类别越多,情况看起来越糟 - 在我的实际应用程序中,条形变细为单行。

设置 的gap参数so.Dodge()或 的width参数so.Bar()似乎都不能解决问题(不过如果我不太挑剔的话,两者都会稍微缓解一下)。

我猜条形图正在使用so.Dodge()适合文本的设置来找出它自己的闪避,但这似乎并不奏效。请注意,颠倒.add()几何图形的顺序似乎没有任何作用。

我怎样才能避免这种情况?


阅读 108

收藏
2023-02-01

共1个答案

一尘不染

并不 理想,但可以通过text仅在带有文本的层中分配(或从条形图层中取消分配)并限制用于计算文本闪避的变量来解决:

(
    so.Plot(dat, x='x', y='y', color='group')
    .add(so.Bar(), so.Dodge())
    .add(so.Text({'va':'bottom'}), so.Dodge(by=["color"]),  text='group')
)

在此处输入图像描述

2023-02-01