我有一个选择工具可以通过Bokeh服务器更新绘图和Pretext
。我想在不使用散景服务器的情况下进行交互。解决方案是使用CustomJS绘制数据。
虚拟数据如下:
import pandas as pd
import random
list_type = ['All', 'Compliment', 'Sport', 'Remaining', 'Finance', 'Infrastructure', 'Complaint', 'Authority',
'Danger', 'Health', 'English']
df = pd.concat([pd.DataFrame({'Subject' : [list_type[i] for t in range(110)],
'Polarity' : [random.random() for t in range(110)],
'Subjectivity' : [random.random() for t in range(110)]}) for i in range(len(list_type))], axis=0)
我用于通过散景服务器进行绘图交互的代码如下:
options = []
options.append('All')
options.extend(df['Subject'].unique().tolist())
source = ColumnDataSource(df)
p = figure()
r = p.circle(x='Polarity', y='Subjectivity', source = source)
select = Select(title="Subject", options=options, value="All")
output_notebook()
def update_plot(attr, old, new):
if select.value=="All":
df_filter = df.copy()
else:
df_filter = df[df['Subject']==select.value]
source1 = ColumnDataSource(df_filter)
r.data_source.data = source1.data
stats.text = str(df_filter.describe())
select.on_change('value', update_plot)
layout = column(row(select, width=400), p)
#show(layout)
curdoc().add_root(layout)
我在bokeh网站上尝试了一些示例,但我找不到任何使用“选择”工具的示例。在javascript方面我有0经验。我尝试了以下将替换函数update_plot()
:
update = CustomJS(args=dict(source=source), code="""
var data = source.data;
var f = cb_obj.value;
if (f == 'All') {
source.data = source.data;
}
}
if (f == 'Compliment') {
source_fill = source_bar.data;
}
}
source.change.emit();
""")
select.js_on_change('value', update)
我知道这不是解决方案。除此之外,我希望交互在主题方面是动态的。我的JS示例是静态的,不起作用。
任何人都可以帮助我吗?