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

Vega-Lite图表带分组明细的自定义Tooltip实现方案问询

在Vega-Lite中创建可扩展的分组自定义Tooltip

需求说明

需要实现自定义Tooltip,将同一分组维度下的所有字段值集中展示在一个面板中。例如对daily_total_login按department分组后,Tooltip需呈现如下格式:

daily_total_login - dept1: 50
daily_total_login - dept2: 60
daily_total_login - dept3: 60

现有方案局限性

通过pivot变换后手动配置Tooltip字段的方式,仅适用于已知所有分组唯一值的场景,无法轻松扩展至多字段分组或分组值动态变化的情况。

解决方案

通过joinaggregate、window和calculate变换组合,动态生成包含所有分组数据的Tooltip文本,无需提前指定分组值,同时支持排序。

完整代码示例

{
  "transform": [
    // 基础聚合:按日期和部门求和登录数
    {
      "aggregate": [{"op": "sum", "field": "daily_total_login", "as": "sum_login"}],
      "groupby": ["Date", "department"]
    },
    // 将同一日期下的所有部门数据聚合成数组
    {
      "joinaggregate": [
        {"op": "collect", "field": "{dept: department, value: sum_login}", "as": "dept_data"}
      ],
      "groupby": ["Date"]
    },
    // 对数组中的条目按登录数降序排序(可选,也可按部门名称排序)
    {
      "window": [
        {"op": "sort", "field": "value", "order": "descending", "as": "sorted_dept_data"}
      ],
      "frame": [null, null],
      "groupby": ["Date"],
      "sort": [{"field": "sum_login", "order": "descending"}]
    },
    // 格式化数组为多行文本,用于Tooltip
    {
      "calculate": "'Date: ' + datum.Date + '\\n' + datum.sorted_dept_data.map(d => 'daily_total_login - ' + d.dept + ': ' + d.value).join('\\n')",
      "as": "custom_tooltip"
    }
  ],
  "mark": "rule",
  "encoding": {
    "x": {"field": "Date", "type": "ordinal", "timeUnit": "yearmonthdate"},
    "opacity": {
      "condition": {"param": "hover", "empty": false, "value": 0.3},
      "value": 0
    },
    // 直接引用生成的自定义Tooltip字段
    "tooltip": [{"field": "custom_tooltip", "type": "nominal"}]
  },
  "params": [
    {
      "name": "hover",
      "select": {"type": "point", "fields": ["Date"], "nearest": true, "on": "pointerover", "clear": "pointerout"}
    }
  ]
}

关键步骤解释

  • 基础聚合:先按Date和department计算每个部门每日的登录总数,得到基础数据集。
  • 聚合分组数据:使用joinaggregate的collect操作,将同一日期下的所有部门数据(包含部门名称和登录数)聚合成一个数组,确保每个日期条目携带该日期下所有分组的完整数据。
  • 排序(可选):通过window变换对聚合后的数组排序,示例中按登录数降序排列;若需按部门名称排序,只需将sort字段改为department即可。
  • 格式化Tooltip文本:利用calculate结合JavaScript数组方法map、join,将数组转换为符合需求的多行文本,每行对应一个分组的统计数据。
  • 配置Tooltip:在编码中直接引用生成的custom_tooltip字段,即可展示所有分组数据。

方案优势

  • 无需提前知晓所有分组值,新增分组或修改分组字段时无需调整Tooltip配置,扩展性强。
  • 支持对分组数据排序,提升Tooltip可读性。
  • 代码结构简洁,逻辑清晰,避免了手动维护pivot后的字段列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:40:56