javascript - 如何为 Bokeh 回调过滤器的一部分编写 Javascript 代码,以便我可以按数字和类别进行过滤?
问题描述
我正在构建一个 Bokeh 可视化并且被 Javascript 卡住了。我已经调整了一些 JS 代码以使用滑块,并且我还想使用复选框另外按类别过滤这些结果。
我一直在尝试让我所拥有的(下面的简化版本)与我在其他 stackoverflow 帖子中找到的其他代码一起使用,但我不知道如何在第一个 JS 之后对其进行扩展环形。我会包括我一直在起草的内容,但坦率地说,这是一堆无意义的垃圾。
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]]))
有人可以帮我吗?我只需要一些代码来演示它是如何工作的,其余的我可以调整。
解决方案
我不是散景专家,但在我看来,您的问题可以通过使用“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)])
推荐阅读
- blazor - Blazor wasm cookie 身份验证
- excel - 无法删除包含旧数据的单元格以便为新数据让路
- list - 有没有办法在flutter firebase中查询文档中的整个列表?
- python - 制作 pyplot Slider 时出错:“元组”对象没有属性“名称”
- javascript - Vue:将更改事件绑定到动态插入的内容
- javascript - 为什么我们可以使用不带名字的 let ?
- sql - 如何计算两个具有不同值、不同时间的 BigQuery 记录之间的时间
- css - 如何将 React 中的元素滚动到容器内的特定位置?
- python - 我想要一个正确的方法在我的新 Linux 上安装 OSMnx
- c++ - OpenCV 重新映射 BORDER_CONSTANT 问题