javascript - 散景触发 js_on_change 以首次显示图形
问题描述
我正在我的网站中绘制一个熊猫数据源的散景图。熊猫数据框df
如下所示:
X Y Type
0 5 A
0 15 B
1 12 A
1 18 B
我添加了一个Select
带有值A
和的对象B
。基本上,用户在该选择对象中选择值A
或,我的回调过滤 DataSource 并绘制与所选类型相对应的图形:B
CustomJS
source = ColumnDataSource(df)
select = Select(title="Select Type:", options=['A', 'B'])
callback = CustomJS(args={'source':source}, code = """
var t = cb_obj.value
var a = df.filter(function(c){if (c['Type'] == t) return c;});
source.data['X'] = []
source.data['Y'] = []
for (var i=0; i < a.length; i++) {
source.data['X'].push(a[i]['%s']);
source.data['Y'].push(a[i]['Y']);
}
source.change.emit();
"""
select.value = 'A'
问题是图表在第一次显示时看起来很乱。实际上,它绘制了所有X
和Y
列,我必须手动更改下拉列表中的默认选择类型,以触发回调并正确过滤数据。
我可以在第一次显示我的图表之前以编程方式触发该回调吗?
解决方案
没有办法预先触发回调。相反,您应该确保(在 Python 中)将 CDS 初始化为您实际想要显示的正确初始状态。
但是,如果您尝试在数据子集之间进行选择,那么您上面的方法将无法工作。您实际上正在更新您拥有的唯一数据源,每次回调都会丢弃数据(您无法取回)。相反,您应该使用 select 回调来配置 Bokeh 过滤器:
https://docs.bokeh.org/en/latest/docs/user_guide/data.html#filtering-data
具体来说,您可能想要一个GroupFilter
,并且在 Discourse 上有一些示例/讨论:
https://discourse.bokeh.org/t/scatter-plot-legend-doesnt-update-correctly-when-data-is-updated/5545
推荐阅读
- mysql - Visual Studio 显示 mysql 表不存在
- r - How to find the most frequent value from multiple columns in a dataframe
- android - Android OpenCV Linking CXX shared library fails
- android - When KOIN graph reassembling, delegate function viewmodel() not refreshing viewmodel instance
- python - Python的beautifulsoup刮板在几页后停止正常工作
- java - 使用 Android 信标库进行背景信标检测
- java - 国际象棋游戏中的Jpanel Ghost Pieces
- magento - 如何在前端编辑 Amasty Magento One Page Checkout 页面以在付款方式部分添加标签?
- c# - 用纯色或透明的笔触绘制 WPF 多边形
- python - 我如何模拟 requests.Session.send() 方法?