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

如何为Plotly go.Scattermapbox配置customdata实现悬停展示外部数据

核心问题排查与修正方案
  • customdata维度不匹配是取值失败的核心原因
    使用np.dstack((hover_1, hover_2))生成的数组维度为(1, 站点总数, 2),但Plotly要求Scattermapbox的customdata必须是与散点逐点对应的二维结构,即维度为(站点总数, 自定义字段数)的格式。多嵌套的最外层维度会导致Plotly无法匹配到对应站点的数值,最终造成悬停模板中读取自定义数据失败。
    正确的数组拼接方式可选用np.column_stack((hover_1, hover_2))或np.array([hover_1, hover_2]).T,两种方式生成的数组维度均为(站点总数, 2),完全匹配Plotly的参数要求。
  • 缺失customdata的显式参数绑定
    现有贴出的图形配置代码中,未在go.Scattermapbox的构造函数中传入计算好的customdata参数。即使自定义数组的数值完全正确,没有绑定到图形对象上,hovertemplate中的%{customdata}占位符也无法读取到对应数据。
  • hovertemplate的索引规则说明
    当customdata的维度匹配要求后,%{customdata[0]}会自动读取当前悬停散点对应自定义数组的第0位元素(即站点海拔),%{customdata[1]}读取第1位元素(即测量方法),无需额外特殊处理。

修正后的完整配置代码示例:

import numpy as np
# 拼接两个自定义数组,生成符合维度要求的结构
custom_data = np.column_stack((hover_1, hover_2))
plot_data = [
    go.Scattermapbox(
        lon=data_slctd["longitude"], 
        lat=data_slctd["latitude"], 
        mode="markers", 
        text = data_slctd.site_name.tolist(),
        # 显式传入自定义数据
        customdata=custom_data,
        hovertemplate =  (
            "<b>%{text}</b><br><br>"
            "longitude: %{lon:.2f}<br>"
            "latitude: %{lat:.2f}<br>"
            "altitude: %{customdata[0]:.0f}<br>"
            "measure method: %{customdata[1]}<br>"
            "ppm: %{marker.color:.2f}"
            "<extra></extra>"
        ),
    )
]

注意:如果customdata中存储的是文本类数据(如测量方法名称),不要在模板占位符后添加数字格式化符号(如.0f、.2f),否则会触发前端渲染报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 15:24:03