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

Vega-Lite中无法生成带参考线的折线图,求正确配置

Vega-Lite 分布曲线可视化修正方案

问题根源

当前transform步骤错误地将min和data数组分别独立展开,导致x与y值形成全量笛卡尔积组合,最终生成混乱的交叉线条,而非预期的平滑分布曲线。

修正方案

替换原transform部分,通过索引配对min和data数组的对应元素,再统一展开:

"transform": [
  {"calculate": "datum.metrics.partitions[0].a.distribution", "as": "dist"},
  {"calculate": "sequence(0, length(dist.min), 1)", "as": "indices"},
  {"flatten": ["indices"]},
  {"calculate": "dist.min[datum.indices]", "as": "x"},
  {"calculate": "dist.data[datum.indices]", "as": "y"}
]

完整修正代码

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "params": [
    {
      "name": "chart_title",
      "value": " Weekly  Distribution"
    },
    {
      "name": "titleAxisXname",
      "value": "Weekly  Min "
    },
    {
      "name": "tick_Count_X",
      "value": 8
    }
  ],
  "width": 425,
  "height": 135,
  "padding": 20,
  "title": {
    "text": {
      "expr": "chart_title"
    },
    "fontSize": 16,
    "color": "#001D33",
    "fontWeight": 700,
    "font": "Google Sans",
    "align": "left",
    "dx": 40,
    "dy": -10
  },
  "data": {
    "name": "vis",
    "values":[
      {
        "customer": "Customer",
        "type": "monthly",
        "metrics": {
          "partitions": [
            {
              "a": {
                "mean": 135,
                "distribution": {
                  "min": [0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,300],
                  "data": [
                    0.01,0.01,0.02,0.03,0.05,0.08,0.13,0.21,0.28,0.31,0.33,0.3,0.28,0.26,0.24,0.22,0.21,0.2,0.19,0.18,0.17,0.16,0.15,0.14,0.13,0.12,0.11,0.1,0.09,0.08
                  ]
                }
              }
            }
          ]
        }
      }
    ]
  },
  "transform": [
    {"calculate": "datum.metrics.partitions[0].a.distribution", "as": "dist"},
    {"calculate": "sequence(0, length(dist.min), 1)", "as": "indices"},
    {"flatten": ["indices"]},
    {"calculate": "dist.min[datum.indices]", "as": "x"},
    {"calculate": "dist.data[datum.indices]", "as": "y"}
  ],
  "layer": [
    {
      "mark": "line",
      "encoding": {
        "x": {"field": "x", "type": "quantitative"},
        "y": {"field": "y", "type": "quantitative"}
      }
    },
    {
      "data": {"values": [{}]},
      "encoding": {"x": {"datum": 65}},
      "layer": [
        {"mark": {"type": "rule"}},
        {"mark": {"type": "text", "text": ["25th", "Percentile"]}}
      ]
    },
    {
      "encoding": {"x": {"datum": 130}},
      "layer": [
        {"mark": {"type": "rule", "color": "#594CB8"}},
        {"mark": {"type": "text", "text": ["50th", "Percentile"], "color": "#594CB8"}}
      ]
    },
    {
      "encoding": {"x": {"datum": 200}},
      "layer": [
        {"mark": {"type": "rule", "color": "#B4539E"}},
        {"mark": {"type": "text", "text": ["75th", "Percentile"], "color": "#B4539E"}}
      ]
    }
  ],
  "config": {
    "background": "white",
    "axisX": {
      "title": {"expr": "titleAxisXname"},
      "tickCount": {"expr": "tick_Count_X"},
      "titlePadding": 20,
      "titleFont": "Google Sans",
      "titleColor": "black",
      "titleFontSize": 12,
      "titleFontWeight": 700,
      "labelFontSize": 12,
      "labelColor": "#56615F",
      "labelFontWeight": 400
    },
    "axisY": {
      "orient": "right",
      "tickCount": 3,
      "format": "%",
      "title": null,
      "labelFontSize": 12,
      "labelColor": "#56615F",
      "labelFontWeight": 400,
      "labelPadding": 10
    },
    "line": {
      "point": false,
      "interpolate": "cardinal",
      "color": "#006A62"
    },
    "text": {
      "font": "Google Sans",
      "fontSize": 12,
      "color": "#001D33",
      "fontWeight": 700,
      "dx": 15,
      "dy": -105
    },
    "rule": {
      "strokeWidth": 5,
      "strokeDash": [0.5,16],
      "strokeCap": "round"
    }
  }
}

说明

  1. 通过sequence生成数组索引,确保min和data数组的对应元素一一配对
  2. 简化了数据路径的读取,直接定位到distribution对象,避免多层flatten的冗余步骤
  3. 顺带修正了标题颜色(原白色在白色背景下不可见)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:05:41