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

HoloViews多边形绘图如何关联数据源实现tooltip显示region_id

问题原因

构造hv.Polygons时仅传入了多边形坐标点列表,未将region_id作为关联维度绑定到图形元素上,底层Bokeh的HoverTool找不到对应数据源字段,因此tooltip会显示???占位符。

修复方案

构造Polygons对象时,将每个多边形的坐标和对应的region_id值绑定传入,同时通过vdims参数声明额外的值维度,让HoloViews把关联字段写入渲染数据源,即可让tooltip正常读取值。
完整可运行代码如下:

import warnings
import numpy as np
import pandas as pd
import holoviews as hv
from bokeh.models import HoverTool

warnings.filterwarnings("ignore", category=DeprecationWarning)
hv.extension('bokeh')

# 原始示例数据
data_dict = {'depth': {12: np.array([143.31908832, 174.03133903, 165.65527066, 160.07122507,
         162.86324786, 155.88319088, 153.78917379, 152.39316239,
         152.39316239, 127.26495727, 131.45299145, 131.45299145,
         133.54700855, 152.39316239, 135.64102564, 144.01709402,
         156.58119658, 134.24501424]),
  13: np.array([169.84330484, 189.38746439, 178.91737892, 166.35327635]),
  14: np.array([173.33333333, 187.29344729, 190.08547009, 176.12535613]),
  15: np.array([199.15954416, 211.72364672, 211.72364672, 199.15954416]),
  16: np.array([179.61538462, 194.27350427, 194.27350427, 179.61538462])},
 'ping_time': {12: np.array(['2017-06-28T22:47:51.213500000', '2017-06-28T22:48:37.570900000',
         '2017-06-28T22:49:46.736800000', '2017-06-28T22:50:41.866800000',
         '2017-06-28T22:51:17.024100000', '2017-06-28T22:51:24.038300000',
         '2017-06-28T22:51:48.138600000', '2017-06-28T22:52:17.414900000',
         '2017-06-28T22:52:58.491200000', '2017-06-28T22:53:02.007000000',
         '2017-06-28T22:52:18.584100000', '2017-06-28T22:51:47.552200000',
         '2017-06-28T22:51:22.284000000', '2017-06-28T22:51:16.439500000',
         '2017-06-28T22:50:40.112400000', '2017-06-28T22:49:45.568000000',
         '2017-06-28T22:48:36.390400000', '2017-06-28T22:47:57.668800000'],
        dtype='datetime64[ns]'),
  13: np.array(['2017-06-28T22:46:27.321600000', '2017-06-28T22:46:27.321600000',
         '2017-06-28T22:47:07.220500000', '2017-06-28T22:47:04.293000000'],
        dtype='datetime64[ns]'),
  14: np.array(['2017-06-28T22:43:49.614200000', '2017-06-28T22:43:49.614200000',
         '2017-06-28T22:44:02.499000000', '2017-06-28T22:44:02.499000000'],
        dtype='datetime64[ns]'),
  15: np.array(['2017-06-28T22:44:30.584400000', '2017-06-28T22:44:30.584400000',
         '2017-06-28T22:45:14.003600000', '2017-06-28T22:45:14.003600000'],
        dtype='datetime64[ns]'),
  16: np.array(['2017-06-28T23:02:20.571500000', '2017-06-28T23:02:20.571500000',
         '2017-06-28T23:02:58.034900000', '2017-06-28T23:02:58.034900000'],
        dtype='datetime64[ns]')},
 'region_id': {12: 14,
  13: 15,
  14: 16,
  15: 17,
  16: 18}}
data_df = pd.DataFrame.from_dict(data_dict)

# 配置hover工具
tooltips = [
    ('RegionID', '@region_id')
]
hover = HoverTool(tooltips=tooltips)

# 构造多边形时绑定region_id维度
region_poly = hv.Polygons(
    [(np.array(list(zip(x,y))), rid) for x, y, rid in zip(data_df.ping_time, data_df.depth, data_df.region_id)],
    vdims=['region_id']
).opts(tools=[hover], alpha=0.3, color='r', xrotation=45, width=800, height=400)

region_poly
注意事项
  • 原写法仅传入坐标数组时,HoloViews只会生成x、y两个基础维度,不存在region_id字段,HoverTool自然无法读取对应值
  • 传入数据时将每个多边形的关联属性和坐标绑定,再通过vdims声明额外值维度,HoloViews会自动将这些字段同步到底层Bokeh的ColumnDataSource中,tooltip即可正常渲染
  • 后续如果需要新增其他tooltip展示字段,只需把对应值加入传入的元组,同时在vdims列表中注册对应字段名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:57:19