You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Holoviews中能否将link_selections用于含Overlay的组合图表?

解决Holoviews+Bokeh中部分图表的选择链接问题

我明白你的痛点了——想让共享数据集的w_accel_scatter、mpg_hist和violin保持选择链接,同时把w_accel_scatter和另一个用独立数据的line_plot叠加成Overlay,但直接传给link_selections会失效。下面是具体的解决方案:

核心思路

link_selections默认会对传入布局里的所有元素尝试建立链接,但我们只需要让共享autompg_ds的三个图表联动,所以要先给这三个图表建立选择链接,再把独立数据的line_plot叠加到已链接的w_accel_scatter上,而不是反过来。

具体代码实现

import holoviews as hv
from holoviews import link_selections

# 假设你已经定义好这些变量:autompg_ds、line_plot(使用其他独立数据)
w_accel_scatter = hv.Scatter(autompg_ds, 'weight', 'accel')
mpg_hist = hv.Histogram(autompg_ds, dimension='mpg', normed=False).opts(color="green")
violin = hv.Violin(autompg_ds, [], 'hp')

# 1. 初始化link_selections实例
mpg_ls = link_selections.instance()

# 2. 先给三个共享数据集的图表建立选择链接
linked_layout = mpg_ls(w_accel_scatter + mpg_hist + violin)

# 3. 从已链接的布局中取出w_accel_scatter,和line_plot叠加成Overlay
linked_scatter = linked_layout[0]
scatter_with_line = linked_scatter * line_plot

# 4. 重新组合布局,替换原来的w_accel_scatter为叠加后的Overlay
final_layout = scatter_with_line + linked_layout[1] + linked_layout[2]

# 5. 在笔记本中显示最终布局
final_layout

为什么这个方法有效?

  • 当我们先对三个共享数据集的图表调用mpg_ls()时,它们已经建立了选择同步的关联,linked_layout里的每个元素都带有链接逻辑。
  • 把line_plot和已链接的linked_scatter叠加时,line_plot因为使用独立数据集,不会被纳入选择链接的范围,而linked_scatter依然会和mpg_hist、violin保持选择联动。
  • 最后重新组合的布局既保留了Overlay的展示效果,又实现了目标图表间的选择链接。

内容的提问来源于stack exchange,提问作者Theom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:22:59