我被困住(特别是在CustomJS回调函数上),试图选择要在简单的散景线图中绘制的行。理想的结果是一条简单的线图,其中x轴为Date
,y轴为Value
。使用2个选择窗口小部件,我想选择Country
和Type
。
任何建议都值得欢迎!
到目前为止,我的代码:
import pandas as pd
import numpy as np
from bokeh.models.widgets import Select
from bokeh.models import ColumnDataSource, Select
from bokeh.io import show, output_notebook
from bokeh.plotting import figure
output_notebook()
df = pd.DataFrame({'Country': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
'Date': ['01-01-2020', '01-02-2020', '01-03-2020', '01-01-2020', '01-02-2020', '01-03-2020', '01-01-2020', '01-02-2020', '01-03-2020', '01-01-2020', '01-02-2020', '01-03-2020'],
'Type': ['X', 'X', 'X', 'Y', 'Y', 'Y', 'X', 'X', 'X', 'Y', 'Y', 'Y'],
'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]})
df['Date'] = pd.to_datetime(df['Date'])
source = ColumnDataSource(df)
callback = CustomJS(args=dict(source=source), code="""
var data = source.data;
var f = cb_obj.value
var x = data['x']
var y = data['y']
source.change.emit();
""")
select_country = Select(title="Country:", value="A", options=np.unique(source.data['Country']).tolist())
select_country.js_on_change('value', callback)
select_type = Select(title="Type:", value="A", options=np.unique(source.data['Type']).tolist())
select_type.js_on_change('value', callback)
p = figure()
p.line(x='Date', y='Value', source=source)
layout = row(p, column(select_country, select_type))
show(layout)
由于我要部署HTML文件,因此无法使用Python编写回调。因此,我尝试使用CustomJS编写回调。但是我没有Java经验。
只需将CDSView
与GroupFilter
一起使用,其group
会被回调更改。不要更改数据源中的实际数据。