我有一个简单的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
这部分有效。工具提示包含两个字段(index
和Name
),但后者填充了???
。如何让它从数据框中读取正确的列并将其用于工具提示的字段?
答案 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)