我有一个流式图表,其中的分数实时更新。我正在绘制一个图形,以将值显示为学生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',)
答案 0 :(得分:0)
与图例对象互动的一种方法是使用bokeh.models api。如documentation中所述,可以手动创建Legend对象,这使您可以使用legend.items列表添加和删除图例中的legendItem。
请注意,您需要传递一个字形渲染器,以在legendItem和绘图上的某些内容之间建立链接。您可以通过查看Plot object p.renderers或adding a glyph to the figure/plot获取渲染器对象,就像使用r1一样:
r1 = p.line(x = [], y = [], legend = [], color="firebrick", line_width=2)
# r1 is a glyphrenderer