javascript - 如何为 Bokeh 回调过滤器的一部分编写 Javascript 代码,以便我可以按数字和类别进行过滤?

标签 javascript python bokeh

我正在构建 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/

相关文章:

python - Bokeh:显示用户输入的文本

python - 有没有办法在 Bokeh 中使用 MultiSelect 来选择绘制哪个流数据通道?

javascript - 未保存的更改警告弹出窗口

javascript - 为什么 "~undefined"在 JavaScript 中是 -1?

javascript - 单击表格中的图像

python - 基本的 python 。如何禁止函数更改列表?

javascript - JavaScript 中更好的随机函数

python - 在 Python 中预分配或不预分配列表

python - DataFrame 中列子集的逻辑或

python - 使用 CustomJS 通过 Bokeh 制作动态散点图 - 问题为 "nonexistent column name"