Bokeh LabelSet ось x является датой и временем - PullRequest
0 голосов
/ 26 февраля 2020

Я новичок в 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 принимает числовые данные для набора меток. Правильно ли мое понимание?

Если да, какой обходной путь?

Я пытался выполнить похожие запросы, но не смог найти решение для себя.

Аналогичный запрос

А это

1 Ответ

0 голосов
/ 26 февраля 2020

Самое простое решение - просто использовать общий источник данных. Это также предотвращает встраивание данных дважды.

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)
...