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

如何在Deneb(Vega/Vega-Lite)中绘制x、y分别升序的散点图

Deneb(Vega-Lite)实现x/y各自排序后的散点图

要实现x、y各自升序排序后再绘制(断开原数据关联),可以通过Vega-Lite的**数据转换(transform)**来拆分、排序并重新合并数据集,具体代码如下:

{
  "data": {
    "values": [
      {"x": "1", "y": "3.2"},
      {"x": "2", "y": "1.9"},
      {"x": "4", "y": "2.1"},
      {"x": "3", "y": "4.5"},
      {"x": "6", "y": "5.1"},
      {"x": "5", "y": "8.5"},
      {"x": "7", "y": "6"},
      {"x": "8", "y": "7.9"},
      {"x": "9", "y": "9.1"},
      {"x": "10", "y": "11"}
    ]
  },
  "transform": [
    // 提取所有x值,转定量类型后升序排序,添加索引用于后续合并
    {
      "fold": ["x"],
      "as": ["key", "x_val"]
    },
    {
      "calculate": "parseFloat(datum.x_val)",
      "as": "x_num"
    },
    {
      "sort": [{"field": "x_num", "order": "ascending"}],
      "window": [{"op": "row_number", "as": "index"}]
    },
    {"project": ["index", "x_num"]},
    // 提取所有y值,转定量类型后升序排序,添加索引并与x数据集合并
    {
      "lookup": "index",
      "from": {
        "data": {"values": [
          {"x": "1", "y": "3.2"},
          {"x": "2", "y": "1.9"},
          {"x": "4", "y": "2.1"},
          {"x": "3", "y": "4.5"},
          {"x": "6", "y": "5.1"},
          {"x": "5", "y": "8.5"},
          {"x": "7", "y": "6"},
          {"x": "8", "y": "7.9"},
          {"x": "9", "y": "9.1"},
          {"x": "10", "y": "11"}
        ]},
        "transform": [
          {"fold": ["y"], "as": ["key", "y_val"]},
          {"calculate": "parseFloat(datum.y_val)", "as": "y_num"},
          {"sort": [{"field": "y_num", "order": "ascending"}],
           "window": [{"op": "row_number", "as": "index"}]},
          {"project": ["index", "y_num"]}
        ]
      },
      "as": ["y_index", "y_num"]
    },
    // 移除多余字段,保留最终可用数据
    {"project": ["x_num", "y_num"]}
  ],
  "mark": {"type": "line", "point": true},
  "encoding": {
    "x": {"field": "x_num", "type": "quantitative", "title": "排序后的X"},
    "y": {"field": "y_num", "type": "quantitative", "title": "排序后的Y"}
  }
}

关键转换步骤说明:

  • 折叠(fold)字段:将x、y从对象结构转为列表形式,实现单独处理
  • 类型转换:原数据中x、y为字符串格式,用parseFloat转为数值类型,确保排序逻辑生效
  • 窗口函数(window):为排序后的x、y分别添加行号索引,保证后续能按索引一一对应合并
  • 查找合并(lookup):通过索引字段将排序后的x、y数据集合并,得到x、y各自升序且无原关联的新数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:21:04