我可以在Holoviews中将link_selections与组合图一起使用吗?

问题描述

我想跨多个元素链接选择,其中之一实际上是一个“叠加”(通常为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 + violinline_plot使用其他数据),同时保留w_accel_scattermpg_hist和{之间的选择链接{1}}:

Structure of the desired layout.

问题在于,调用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)

Screenshot showing linked_selections with overlays

在这里,我们仅专门链接彼此相关的图,而不链接不相关的other_plot。我们应该在文档中阐明如何执行此操作,因为它并不明显!另外,我本来希望mpg_ls(w_accel_scatter*other_plot + mpg_hist + violin)能够正常工作,但我会在HoloViews上将其记录为问题。