我正在构建 Bokeh 可视化,但遇到了 Javascript 问题。我调整了一些 JS 代码以使用 slider ,并且我还想使用复选框按类别额外过滤这些结果。
我一直在尝试将我所拥有的(下面的简化版本)与我在 the likes of this other stackoverflow post 上找到的其他代码一起使用。 ,但我不知道如何在第一个 JS for 循环之后对其进行扩展。我会包括我一直在起草的内容,但坦率地说,这是一堆无意义的垃圾。
from bokeh.models import Slider, CustomJSFilter, CDSView, ColumnDataSource, CustomJS
from bokeh.models.widgets import CheckboxGroup
from bokeh.layouts import column, layout
data = dict(Flights=[97, 34, 23, 6, 26, 97, 21, 92, 73, 10, 92, 14, 77, 4, 25, 48, 26, 39, 93],
Not_Cancelled=[87, 63, 56, 38, 57, 63, 73, 56, 30, 23, 66, 47, 76, 15, 80, 78, 69, 87, 28],
OnTime_Arrivals=[21, 65, 86, 39, 32, 62, 46, 51, 17, 79, 64, 43, 54, 50, 47, 63, 54, 84, 79],
Category = ['A', 'B', 'B', 'C', 'A', 'C', 'B', 'C', 'C', 'B', 'A', 'A', 'B', 'B', 'A', 'C', 'C', 'C', 'C'])
source = ColumnDataSource(data=data)
Category_dict = dict(Cat = ['A','B','C'])
MinFlights = Slider(start=0, value=50, end=100, step=1)
MinFlights.js_on_change('value', CustomJS(args=dict(source=source), code="""
source.change.emit()
"""))
checkbox_group = CheckboxGroup(labels= list(Category_dict["Cat"]), active = [1])
checkbox_group.js_on_change("active", CustomJS(code="source.change.emit();", args=dict(source=source)))
custom_filter = CustomJSFilter(args=dict(source=source, MinFlights=MinFlights), code='''
var indices = [];
for (var i = 0; i < source.get_length(); i++){
if (source.data['Flights'][i] > MinFlights.value){
indices.push(true);
} else {
indices.push(false);}}
return indices;
''')
view = CDSView(source=source, filters=[custom_filter])
p = figure()
p.circle('OnTime_Arrivals', 'Not_Cancelled', source=source, view=view, size=20)
inputs = column(MinFlights, checkbox_group, width=200)
show(layout([[inputs,p]]))
有人可以帮我吗?我所需要的只是一些演示其工作原理的代码,然后我可以调整其余部分。
最佳答案
我不是 Bokeh 专家,但在我看来,您的问题可以通过使用“BooleanFilter”来解决。
优点:可以使用booleanFilter编写python代码,不用担心JS
例如我想要这样的东西:
import pandas as pd, numpy as np
from bokeh.models import BooleanFilter,ColumnDataSource,CDSView
df=pd.DataFrame(data)
df["bools"]=np.where((df.Flights > 10)&(df.Category=="A"),True,False)
view = CDSView(source=ColumnDataSource(df), filters=[BooleanFilter(bools)])
关于javascript - 如何为 Bokeh 回调过滤器的一部分编写 Javascript 代码,以便我可以按数字和类别进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59801113/