Python 向Holoviews绘图中的每个数据点添加文本注释

Python 向Holoviews绘图中的每个数据点添加文本注释,python,bokeh,holoviews,Python,Bokeh,Holoviews,在Bokeh中,我可以通过使用标签集以编程方式向绘图中的每个点添加文本注释。下面我给出一个简单条形图的示例: import numpy as np import pandas as pd # Make some data dat = \ (pd.DataFrame({'team':['a','b','c'], 'n_people':[10,5,12]}) .assign(n_people_percent = lambda x: (x['n_people']/np.sum(x['n_pe

在Bokeh中,我可以通过使用
标签集
以编程方式向绘图中的每个点添加文本注释。下面我给出一个简单条形图的示例:

import numpy as np
import pandas as pd

# Make some data
dat = \
(pd.DataFrame({'team':['a','b','c'], 'n_people':[10,5,12]})
    .assign(n_people_percent = lambda x: (x['n_people']/np.sum(x['n_people'])*100)
        .round(1).astype('string') + '%')
)

dat

然而,我不知道如何用HoloView实现同样的效果。我可以很容易地在没有注释的情况下绘制相同的条形图:

import holoviews as hv
hv.extension('bokeh')

p = hv.Bars(dat, kdims=['team'], vdims=['n_people'])
p

我可以添加一个文本标签,用
hv.text
元素添加覆盖

p * hv.Text('a', 11, '37.0%')

但我不知道如何在不为每个数据点(条)分别显式调用
hv.Text
的情况下标记每个条。问题似乎是
hv.Text
与其他元素(例如
hv.bar
)一样,不接受
data
参数,而只接受
x
y
坐标。我的直觉是我应该能够做类似的事情

p * hv.Text(dat, kdims=['team'], vdims=['n_people_percent'])
感谢您的帮助

看起来这会将矢量化标签添加到
hv.labels
,因此请尝试:

import holoviews as hv
hv.extension('bokeh')

p = hv.Bars(dat, kdims=['team'], vdims=['n_people'])
p * hv.Labels(dat, kdims=['team', 'n_people'], vdims=['n_people_percent'])

我们还没有添加矢量化的文本元素,但这样做相当简单。关于这一点有一些讨论,包括指向此类元素的实现的链接。现在,您可以简单地创建多个常规文本元素的覆盖。
import holoviews as hv
hv.extension('bokeh')

p = hv.Bars(dat, kdims=['team'], vdims=['n_people'])
p * hv.Labels(dat, kdims=['team', 'n_people'], vdims=['n_people_percent'])