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

时间:2017-05-09 10:53:31

标签: python visualization bokeh

我有一个简单的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),但后者填充了???。如何让它从数据框中读取正确的列并将其用于工具提示的字段?

1 个答案:

答案 0 :(得分:2)

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

正确的定义是

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)