散景 - 在流式图表

时间:2018-02-08 14:38:57

标签: python dynamic legend bokeh

我有一个流式图表,其中的分数实时更新。我正在绘制一个图形,以将值显示为学生X的折线图。 我想要动态更新图例(在图表中显示为图例或在鼠标悬停时显示学生的名称)。 下面是没有"传奇"但是当我尝试添加图例时,我收到以下错误。

如何使用图例动态显示值或使用鼠标悬停事件或可能的其他方式?

代码:

p = figure(title="Low Percentage", x_axis_label='Time', 
y_axis_label='Low_Perc')
r1 = p.line(x = [], y = [], legend = [], color="firebrick", line_width=2)
ds1 = r1.data_source

@linear()
def update(step):
    test = pd.read_json('c:/scores.csv', orient='columns')
    test2 = pd.read_json( (test['result']).to_json(), orient='index')
    df=test2[['Time','Name','Last','Low','Low_Perc']]
    df2=df.sort_values(by='Low_Perc', ascending=False)
    y = df2['Low_Perc'].iat[0]
    name = df7['Name'].iat[0]
    output_file("lines.html")
    ds1.data['x'].append(step)
    ds1.data['y'].append(y)
    ds1.data['legend'].append(name)
    ds1.trigger('data', ds1.data, ds1.data, ds1.data)
curdoc().add_root(p)
curdoc().add_periodic_callback(update, 30000)

错误:

Error thrown from periodic callback: KeyError('legend',)

1 个答案:

答案 0 :(得分:0)

图例对象互动的一种方法是使用bokeh.models api。如documentation中所述,可以手动创建Legend对象,这使您可以使用legend.items列表添加和删除图例中的legendItem。

请注意,您需要传递一个字形渲染器,以在legendItem和绘图上的某些内容之间建立链接。您可以通过查看Plot object p.renderersadding a glyph to the figure/plot获取渲染器对象,就像使用r1一样:

r1 = p.line(x = [], y = [], legend = [], color="firebrick", line_width=2)
# r1 is a glyphrenderer