我喜欢用HoverTool设置基本的悬停反馈是多么的简单,但是我要处理显示的几个方面。我有时间序列数据,测量值以美元表示。这些数据以pandas.Series
开始生命。清晰的绘图很容易(以下假设为jupyter笔记本):
p = figure(title='Example currency', x_axis_type='datetime',
plot_height=200, plot_width=600, tools='')
p.line(my_data.index, my_data)
p.yaxis[0].formatter = NumeralTickFormatter(format='$0,0')
show(p)
这向我展示了时间序列,在x轴和y轴值上有日期格式,这些值看起来像“150000美元”、“200000美元”、“250000美元”等:
控制
HoverTool
和$x
的格式。访问光标下数据集的名称。
只需添加一个
$y
就允许我查看值,但使用的是无用的单位:p.add_tools(HoverTool())
具有这些默认值的相应工具提示值显示“1.468e+5”,而不是“146800美元”(甚至是“146800”,基本的
HoverTool
值);类似地,日期值显示为“1459728000000”,而不是(例如)“2016-04-04”。通过将Series
设置为pandas.Series
并添加具有所需格式的字符串列,我可以手动解决此显示问题:# Make sure Series and its index have `name`, before converting to DataFrame
my_data.name = 'revenue'
my_data.index.name = 'day'
df = my_data.reset_index()
# Add str columns for tooltip display
df['daystr'] = df['day'].dt.strftime('%m %b %Y')
df['revstr'] = df['revenue'].apply(lambda x: '${:,d}'.format(int(x)))
cds = ColumnDataSource(df)
p = figure(title='Example currency', x_axis_type='datetime',
plot_height=200, plot_width=600, tools='')
p.line('day', 'revenue', source=cds)
p.yaxis[0].formatter = NumeralTickFormatter(format='$0,0')
p.add_tools(HoverTool(tooltips=[('Amount', '@revstr'), ('Day', '@daystr')]))
show(p)
但是,是否有方法来处理
ColumnDataSource
配置中的格式?这似乎比上面要求的所有数据集转换都要理想得多。我查看了文档并(很快)扫描了源代码,没有看到任何明显的东西可以帮助我构建如上所述的“输出”列。与此相关,当我在一个图中有多行时,是否有任何方法可以访问
HoverTool
中每行的name
(或legend
值)?在工具提示中包含一些内容以区分哪些数据集值来自,而不需要依赖(例如)线颜色和工具提示显示,这将非常有帮助。现在,我在HoverTool.tooltips
中添加了一个额外的列,这只是我想要显示的字符串值;显然,这只适用于包含单个度量列的数据集。当多行共享一个底层ColumnDataSource
时,访问提供给ColumnDataSource
的列名就足够了。 最佳答案
嘿,我知道已经晚了两年了,但这是给其他遇到这个的人的
p.add_tools(HoverTool(
tooltips=[
('Date', '@Date{%F}'),
('Value', '@Value{int}')],
formatters={
'Date':'datetime',
'Value':'numeral'},mode='vline'
))