为什么“选择”小部件在bokeh中不起作用?

时间:2019-08-13 23:41:29

标签: python bokeh

我一直在尝试使用bokeh创建股票信息的仪表板,我希望有一个下拉菜单,当您单击其中一个选项时,该菜单会根据您单击的内容更改绘制的信息。

图形看起来不错,但是我无法使用下拉菜单进行更改。

最初,我认为这是bokeh服务器问题。现在,我在anaconda提示符中运行了“ bokeh serve”命令,并找到了以下示例:https://github.com/bokeh/bokeh/blob/1.3.4/examples/howto/server_embed/notebook_embed.ipynb的工作方式与我将代码复制并粘贴到jupyter笔记本中时的工作方式完全相同。但是,当我将代码修改为自己的数据并使用“选择”而不是“滑块”时,就会出现旧问题。

output_notebook()

def modify_dc(doc):

    source = ColumnDataSource(dat[['Date','Close']])

    #Making the glyphs
    big = figure(x_axis_type='datetime', title="Zeiss stock dashboard")
    p = big.line(x = "Date", y = "Close", line_width=2, source=source)

    def update(attr, old, new):
        if new == 'a':
            data = dat[['Date','Traded Volume']]
        else:
            data = dat[['Date','Close']]
        source1 = ColumnDataSource(data=data)
        r.data_source.data = source1.data

    menu = Select(options = ['a','b','c','d'],
                  value='a')
    menu.on_change('value',update)

    doc.add_root(row(menu,big))


show(modify_dc)

没有任何错误消息。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

不要这样做:

r.data_source.data = source1.data

尽管它看起来像“常规” Python dict,但是ColumnDataSource的“ .data”属性实际上是一个非常专业的对象,它处理Python和JavaScript之间的所有自动同步,并且与创建它的CDS紧密相连。将.data从一个CDS移到另一个CDS基本上是行不通的,并且,从今年晚些时候从Bokeh 2.0开始,尝试这样做将引发异常。

相反,您可以从普通的Python .data设置CDS dict

source.data = { ... }

或在最新版本中,直接从熊猫DataFrame

source.data = some_df