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

Vega树形图的Pan与Zoom功能实现需求

Vega树形图平移与缩放实现方案

以下是为你的树形图添加Pan(平移)和Zoom(缩放)功能的修改代码,核心通过信号控制变换参数,将所有图表元素纳入分组容器统一应用交互效果:

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "signals": [
    {
      "name": "scale",
      "value": 1,
      "on": [
        {
          "events": {"type": "wheel", "consume": true},
          "update": "clamp(scale * (1 + event.deltaY * -0.001), 0.25, 4)"
        }
      ]
    },
    {
      "name": "translateX",
      "value": 0,
      "on": [
        {
          "events": "mousedown",
          "update": "translateX"
        },
        {
          "events": "[mousedown, window:mousemove] > window:mouseup",
          "update": "translateX + (event.x - event.x0)"
        }
      ]
    },
    {
      "name": "translateY",
      "value": 0,
      "on": [
        {
          "events": "mousedown",
          "update": "translateY"
        },
        {
          "events": "[mousedown, window:mousemove] > window:mouseup",
          "update": "translateY + (event.y - event.y0)"
        }
      ]
    },
    {
      "name": "isDragging",
      "value": false,
      "on": [
        {
          "events": "mousedown",
          "update": "true"
        },
        {
          "events": "window:mouseup",
          "update": "false"
        }
      ]
    },
    {
      "name": "cursor",
      "value": "default",
      "on": [
        {
          "events": {"signal": "isDragging"},
          "update": "isDragging ? 'move' : 'default'"
        }
      ]
    }
  ],
  "data": [
    {
      "name": "default",
      "transform": [{
        "type": "nest",
        "generate": true,
        "keys": ["$dimension1"]
        },
        {
          "type": "tree",
          "method": "tidy",
          "size": [{"signal": "height"}, {"signal": "width - 20"}],
          "separation": true,
          "as": ["y", "x", "depth", "children"]
        }
      ]
    },
    {
      "name": "links",
      "source": "default",
      "transform": [
        { "type": "treelinks" },
        {
          "type": "linkpath",
          "orient": "horizontal",
          "shape": "diagonal"
        }

      ]
    }
  ],

  "scales": [
    {
      "name": "color",
      "type": "ordinal",
      "domain": {"data": "default", "field": "depth"},
      "range": {"scheme": "datastudio20"}
    }
  ],

  "marks": [
    {
      "type": "group",
      "encode": {
        "update": {
          "cursor": {"signal": "cursor"}
        }
      },
      "transform": [
        {"type": "translate", "x": {"signal": "translateX"}, "y": {"signal": "translateY"}},
        {"type": "scale", "x": {"signal": "scale"}, "y": {"signal": "scale"}}
      ],
      "marks": [
        {
          "type": "path",
          "from": {"data": "links"},
          "encode": {
            "update": {
              "path": {"field": "path"},
              "stroke": {"value": "#ccc"}
            }
          }
        },
        {
          "type": "symbol",
          "from": {"data": "default"},
          "encode": {
            "enter": {
              "size": {"value": 100},
              "stroke": {"value": "#fff"}
            },
            "update": {
              "x": {"field": "x"},
              "y": {"field": "y"},
              "fill": {"scale": "color", "field": "depth"}
            }
          }
        },
        {
          "type": "text",
          "from": {"data": "default"},
          "encode": {
            "enter": {
              "text": {"signal":"datum.$dimension0 || datum.key || 'Customer'"},
              "fontSize": {"value": 12},
              "baseline": {"value": "middle"}
            },
            "update": {
              "x": {"field": "x"},
              "y": {"field": "y"},
              "dx": {"signal": "datum.children ? -7 : 7"},
              "align": {"signal": "datum.children ? 'right' : 'left'"},
              "opacity": 1
            }
          }
        }
      ]
    }
  ]
}

功能说明

  • 缩放控制:鼠标滚轮调整视图大小,缩放范围限制在0.25-4倍,避免内容过度失真
  • 平移操作:按住鼠标左键拖拽,可自由移动视图位置
  • 交互反馈:拖拽时鼠标光标切换为移动样式,提升操作感知

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:06:19