Python 使用CustomJS为线条图示符更新CDSView筛选器
我正在努力弄清楚如何使用自定义回调更新CDS视图过滤器。测试数据帧如下所示:Python 使用CustomJS为线条图示符更新CDSView筛选器,python,bokeh,Python,Bokeh,我正在努力弄清楚如何使用自定义回调更新CDS视图过滤器。测试数据帧如下所示: from bokeh.models import ColumnDataSource, Select, CustomJS, CDSView from bokeh.models.filters import Filter, GroupFilter from bokeh.plotting import figure from bokeh.io import show import pandas as pd import nu
from bokeh.models import ColumnDataSource, Select, CustomJS, CDSView
from bokeh.models.filters import Filter, GroupFilter
from bokeh.plotting import figure
from bokeh.io import show
import pandas as pd
import numpy as np
test = pd.DataFrame({'Title': ['A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B'],
'Chapter': ['C','C','C','C','D','D','D','D','E','E','E','E','F','F','F','F'],
'Page':[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4],
'Line':[91,92,93,94,81,82,83,84,71,72,73,74,51,52,53,54]})
目标是生成一个线条图,其中两条线代表不同标题中的不同章节,其中x轴为页面,y轴为线条,其中标题可通过Select小部件选择。以下代码创建了我要查找的图形:
test1 = test.groupby('Title', sort = False).apply(lambda x: x.to_dict(orient = 'list'))
graph = ColumnDataSource(data = test1[0])
chapterlist = [*set(test1[0]['Chapter'])]
p = figure(plot_width=600, plot_height=300)
for i in range(len(chapterlist)):
view=CDSView(source=graph,
filters=[GroupFilter(column_name='Chapter', group=chapterlist[i])])
p.line(
x='Page',
y='Line',
source=graph,
view=view,
legend_label = chapterlist[i])
接下来,我们可以查看Select小部件的代码、回调和显示图形
callback = CustomJS(args = dict(graph=graph, source= test1.to_dict()), code =
"""
graph.data = source[cb_obj.value];
graph.change.emit();
""")
select.js_on_change('value', callback)
layout = column(select, p)
show(layout)
使用Select时出现的chrome错误是:组“C”与列“Chapter”中的任何值都不匹配。这是完全可以理解的,因为我没有更新CustomJS中的GroupFilter以匹配所选标题中的新章节。我尝试从源对象和数据对象访问GroupFilter,但未成功
首先,我需要使用视图的原因是,选择选项必须是“标题”,因此我需要同时提供标题的所有信息,并且需要为两个“章节”绘制线条
感谢您的帮助 这是最近出现的,结论是
CDSView
的使用与联机图示符不兼容或不受支持。将来的版本将显式引发一个特定的异常以注意这种不兼容性。关于这个问题,我建议使用散点图、条形图或点图,所有这些都使用与CDSView
配合使用的图示符。如果您真的需要使用行,我的最佳建议是使用具体的数据子集预先绘制所有行,并使用JS回调切换它们的可见性 谢谢你的信息!从那以后还有其他选择吗?