Python 使用CustomJS为线条图示符更新CDSView筛选器

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

我正在努力弄清楚如何使用自定义回调更新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 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回调切换它们的可见性

谢谢你的信息!从那以后还有其他选择吗?