我正在尝试使用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.Text()
(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()似乎都不能解决问题(不过如果我不太挑剔的话,两者都会稍微缓解一下)。
gap
so.Dodge()
width
so.Bar()
我猜条形图正在使用so.Dodge()适合文本的设置来找出它自己的闪避,但这似乎并不奏效。请注意,颠倒.add()几何图形的顺序似乎没有任何作用。
.add()
我怎样才能避免这种情况?
这并不 理想,但可以通过text仅在带有文本的层中分配(或从条形图层中取消分配)并限制用于计算文本闪避的变量来解决:
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') )