bokh text glypy с x_axis_type datetime

Я пытаюсь добавить текст к графику временных рядов, сделанному с боке. Я прочитал этот пост и все еще не могу понять это правильно.

Координаты глифа боке с x_axis_type 'datetime'

Я пытаюсь построить текст в последней точке [-1] индекса временного ряда. Вот пример кода:

import pandas as pd
import numpy as np
from datetime import datetime
from bokeh.plotting import output_notebook, figure, show

output_notebook()

# generate randome walks
n=100
df = pd.DataFrame({'date': pd.date_range('12/1/2015', periods=n, freq='D'),
                   'A' : (np.random.random(n) - 0.5).cumsum(),
                   'B' : (np.random.random(n) - 0.5).cumsum(),
                   'C' : (np.random.random(n) - 0.5).cumsum(),})

df.set_index('date', inplace=True)

items = ['A', 'B', 'C']
colors = ['red', 'green', 'blue']

# make a figure
p = figure(x_axis_type='datetime', width=900, height=500)

for item, color in zip(items, colors):

    # plot the lines
    p.line(df.index, df[item], color=color, legend=item)

    # plot text at the last point in the time series
    p.text(x=df.index[-1].timestamp(), y=df[item][-1], text=item)

p.legend.orientation = "top_left"
p.yaxis.minor_tick_out=0

show(p)

Когда я запускаю это, я получаю NaN, построенный 1 января 1970 года (начало эпохи). Места значений Y кажутся в порядке.

Ошибка:

ОШИБКА: C:\Miniconda3\lib\site-packages\bokeh\validation\check.py:E-1001 (BAD_COLUMN_NAME): Glyph ссылается на имя несуществующего столбца: A [рендерер: GlyphRenderer, ViewModel:GlyphRenderer, ref _id: 0173aa55- 4343-4c86-a414-69a0777e3178]

Любые идеи о том, как заставить это работать?


person Randall Goodwin    schedule 01.12.2015    source источник
comment
Проблема в следующем: text=item оценивается как text="A". Боке последовательно интерпретирует строковые значения как имена столбцов в источнике данных столбца. Но вы не добавили столбец с именем "A" в источник данных для глифа. Если вы действительно хотите, чтобы текст читался буквально, просто "A", попробуйте text=dict(value="A"). Если вместо этого вы хотите, чтобы данные из столбца "A" были в вашем DataFrame, вам нужно создать свой собственный ColumnDataSource. Видеть. например, github.com/bokeh/bokeh/ блоб/мастер/примеры/график/файл/   -  person bigreddot    schedule 01.12.2015