散景LabelSet x轴为日期时间

时间:2020-02-26 10:23:22

标签: bokeh

我是Bokeh的新手,正在寻找解决方案来标记每个数据点。复制文档中显示的示例,我找不到X轴为日期时间的解决方案。

import pandas as mypd
from bokeh.models import LabelSet , ColumnarDataSource
from bokeh.plotting import figure, output_file, show

date_1 = ['2020-01-01', '2020-01-02','2020-01-03','2020-01-04','2020-01-05'] 
sal = mypd.DataFrame(date_1)
sal.columns = ["Date_1"]
sal['Sales'] = [15,25,36,17,4]
sal['Date_1'] = mypd.to_datetime(sal['Date_1'])

p= figure(x_axis_type = "datetime")
p.line(x =sal['Date_1'] ,y = sal['Sales'])

lab = LabelSet(x = sal['Date_1'], y = sal['Sales'], text = sal['Sales'])
p.add_layout(lab)

show(p)

它抛出错误

ValueError: expected an element of either String, Dict(Enum('expr', 'field', 'value', 'transform'), Either(String, Instance(Transform), Instance(Expression), Float)) or Float, got 0   2020-01-01

我理解该错误是因为x轴采用数字数据来获取标签集。 我的理解正确吗?

如果是,解决方法是什么?

我尝试了类似的查询,但找不到适合自己的解决方案。

Similar Query

And this

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是仅使用公共数据源。它还可以防止您两次嵌入数据。

import pandas as pd
from bokeh.models import LabelSet, ColumnDataSource
from bokeh.plotting import figure, show

sal = (pd.DataFrame({'Date_1': pd.to_datetime(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05']),
                     'Sales': [15, 25, 36, 17, 4]})
       .set_index('Date_1'))

ds = ColumnDataSource(sal)

p = figure(x_axis_type="datetime")
p.line(x='Date_1', y='Sales', source=ds)

lab = LabelSet(x='Date_1', y='Sales', text='Sales', source=ds)
p.add_layout(lab)

show(p)