Bokeh,选择交互多个数据集进行绘图

时间:2017-11-22 12:25:46

标签: python plot bokeh

我是使用Bokeh的新手。

我的数据大致类似于

date    names   numbers
2016    var1 62
2012    var2 82
2014    var1 118
2015    var2 69852
2012    var3 167
2016    var1 2266
2011    var1 88282
2015    var3 6307
...

我使用Bokeh脚本绘制数据,并从下拉菜单中选择要绘制数据的名称(var1,var2,...)。

该脚本基于此示例:drop_duplicates,看起来像这样

import pandas as pd
from bokeh.io import curdoc
from bokeh.layouts import row, column
from bokeh.models import ColumnDataSource, Select
from bokeh.plotting import figure


def get_dataset(src, name):
    df = src[src.names == name].copy()
    del df['names']
    df = df.set_index(['date'])
    df.sort_index(inplace=True)
    return ColumnDataSource(data=df)


def make_plot(source, title):
    plot = figure(plot_width=800, tools="", toolbar_location=None)
    plot.title.text = title
    plot.line(x='date', y='numbers', source=source, legend="Record")
    return plot


def update_plot(attrname, old, new):
    ver = vselect.value
    plot.title.text = "xxx"
    src = get_dataset(df, ver)
    source.date.update(src.date)


df = pd.read_csv('data/test_data.csv', delimiter='\t')
ver = 'aps'

cc = df['names'].unique()

vselect = Select(value=ver, title='VER', options=sorted((cc)))

source = get_dataset(df, ver)
plot = make_plot(source, "xxx")

vselect.on_change('value', update_plot)
controls = column(vselect)

curdoc().add_root(row(plot, controls))

这样可以正常工作,但我想现在允许选择多个名称(例如var1和var2)来将它们绘制在同一个图中以便于比较。 但是,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

对过道47434701的(可能)清理。看来Bokeh具有MultiSelect方法,在这种情况下可能有用。我想它在最初的提问时间不可用。