从 pandas.DataFrame 列配置 Bokeh 的工具提示

Configure the tooltip of Bokeh from pandas.DataFrame column

我有一个简单的pandas.DataFrame:

df = pd.DataFrame(
    {
        "name": ['foo','bar'],
        "kpi1": [1,2],
        "kpi2": [2,1]
    }
)

我想使用 Bokeh 散点图。第一步是:

import bokeh.plotting as bpl
import bokeh.models as bmo
bpl.output_notebook()

p = bpl.figure(tools=["hover"])

p.scatter(
    'kpi1', 
    'kpi2', source=source)

bpl.show(p)  # open a browser

接下来,我要配置工具提示。特别是我想查看每个点的索引和关联的名称。这是第二步:

source = bpl.ColumnDataSource.from_df(df)
hover = bmo.HoverTool(
    tooltips=[
        ("index", "$index"),
        ('Name', '$name')
    ]
)

p = bpl.figure(tools=[hover])

p.scatter(
    'kpi1', 
    'kpi2', source=source)

bpl.show(p)  # open a browser

部分有效。工具提示包含两个字段(indexName),但后者填充有 ???。我怎样才能让它从数据框中读取正确的列并将其用于工具提示的字段?

那是因为您使用 $ 而不是 @ 来调用工具提示。

正确的定义是

hover = bmo.HoverTool(
    tooltips=[
        ("index", "@index"),
        ('Name', '@name')
    ]
)

顺便说一句,您不需要将 bokeh.plotting 和 bokeh.models 作为变量导入。你可以简单地做:

from bokeh.plotting import figure, ColumnDataSource
from bokeh.io import output_file, show
from bokeh.models import HoverTool

然后

# Create a ColumnDataSource from df: source
source = ColumnDataSource(df)

# Create the figure: p
p = figure(tools=["hover"])

# Add circle glyphs to the figure p
p.circle('kpi1', 'kpi2', source= source)
show(p)
hover = HoverTool(tooltips=[("index", "@index"),
    ('Name', '@name')])

p.add_tools(hover)
show(p)