问题描述
我想跨多个元素链接选择,其中之一实际上是一个“叠加”(通常为plot1*plot2
)。但是,我无法使其工作。
实际上,在初始化link_selections后,通过将包含共享相同Dataset元素的布局作为参数传递来设置。例如,看一下Holoviews在the user guide中提供的示例:
w_accel_scatter = hv.Scatter(autompg_ds,'weight','accel')
mpg_hist = histogram(autompg_ds,dimension='mpg',normed=False).opts(color="green")
violin = hv.Violin(autompg_ds,[],'hp')
mpg_ls = link_selections.instance()
mpg_ls(w_accel_scatter + mpg_hist + violin)
对于我来说,我想显示w_accel_scatter*line_plot + mpg_hist + violin
(line_plot
使用其他数据),同时保留w_accel_scatter
,mpg_hist
和{之间的选择链接{1}}:
问题在于,调用violin
实际上会触发显示作为参数传递的内容,显然mpg_ls()
无效。
顺便说一句,我正在笔记本中工作,并且正在使用bokeh后端。任何帮助将不胜感激!
解决方法
我不确定您所说的“ calling mpg_ls() actually triggers the display of what is passed as an argument
”是什么意思。返回对象作为单元格的值是触发显示的,而不是mpg_ls,因此,您应该能够在mpg_ls调用后继续工作。您只需要捕获mpg_ls调用的结果,然后就可以使用它,直到最终拥有要显示的内容为止。
无论如何,由于在执行mpg_ls()
时不应立即显示任何内容,因此可以将要链接的每个对象分别传递给mpg_ls
,将要链接的每个对象链接起来,然后放入将它们全部放入所需的任何叠加层或布局中。
ETA正是这样做的一个例子:
mpg_ls = link_selections.instance()
other_plot = hv.Curve(([2000,4000,5000],[10,15,25])).opts(color="red")
mpg_ls(w_accel_scatter)*other_plot + mpg_ls(mpg_hist) + mpg_ls(violin)
在这里,我们仅专门链接彼此相关的图,而不链接不相关的other_plot
。我们应该在文档中阐明如何执行此操作,因为它并不明显!另外,我本来希望mpg_ls(w_accel_scatter*other_plot + mpg_hist + violin)
能够正常工作,但我会在HoloViews上将其记录为问题。