首页 > 解决方案 > 在 vega lite 中对多面图表的行进行排序

问题描述

row按每行的项目数对编码中的子图表进行排序有什么魔力吗?

在这个带有汽车数据集的示例中,我希望美国位于顶部,因为它包含最多的项目,然后是日本,然后是欧洲:

在此处输入图像描述

也许与items行标题数据存储的属性有关?

标签: vega-lite

解决方案


我使用聚合转换来计算每个 Origin 和 Cylinder 的项目数,然后使用连接聚合转换来总结每个 Origin 的项目数:

  "transform": [{
      "aggregate": [{"op": "count", "as": "Count"}],
      "groupby": ["Cylinders", "Origin"]
    },
    {
      "joinaggregate": [{"op": "sum", "field": "Count", "as": "OriginCount"}],
      "groupby": ["Origin"]
    }
  ]

然后我可以Count在 x 轴上显示为任何其他数据变量,并row通过计算对编码进行排序OriginCount

  "encoding": {
    "row": {
      "field": "Origin", "type": "nominal",
      "sort": { "field": "OriginCount", "order": "descending"}
    },
    "x": {
      "field": "Count", "type": "quantitative"
    },
    ...
]

给我以下分组条形图: 排序的摸索条形字符

请参阅Vega 编辑器 中的完整规范以供参考:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": { "url": "https://vega.github.io/editor/data/cars.json"},
  "transform": [{
      "aggregate": [{"op": "count", "as": "Count"}],
      "groupby": ["Cylinders", "Origin"]
    },
    {
      "joinaggregate": [{"op": "sum", "field": "Count", "as": "OriginCount"}],
      "groupby": ["Origin"]
    }
  ],
  "mark": {
    "type": "bar",
    "tooltip": true
  },
  "width": 400,
  "encoding": {
    "row": {
      "field": "Origin", "type": "nominal",
      "sort": { "field": "OriginCount", "order": "descending"}
    },
    "x": {
      "field": "Count", "type": "quantitative"
    },
    "y": {
      "field": "Cylinders", "type": "nominal"
    }
  }
}

推荐阅读