堆叠条形图的排序条

Sort bars of Stacked Bar Chart

对于堆积条形图,您可以按其中一个段的大小对条形进行排序吗?

例如,从示例 (Open Editor) 中获取此堆积条形图:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data/barley.json"},
  "mark": "bar",
  "encoding": {
    "x": {"aggregate": "sum", "field": "yield"},
    "y": {"field": "variety"},
    "color": {"field": "site"}
  }
}

现在我想根据 Crookston 中的收益率对 y 轴进行排序。这可能吗?

按另一个字段的总数排序相对容易;您可以使用所需编码的 "sort" 条目 (sort docs):

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data/barley.json"},
  "mark": "bar",
  "encoding": {
    "x": {"aggregate": "sum", "field": "yield"},
    "y": {"field": "variety", "sort": {"op": "sum", "field": "yield"}},
    "color": {"field": "site"}
  }
}

如果您只想按 site == "Crookston" 时的值排序,您可以先将 calculate transform 应用到 select 仅那个值:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data/barley.json"},
  "transform": [
    {
      "calculate": "datum.site == 'Crookston' ? datum.yield : 0",
      "as": "crookston"
    }
  ],
  "mark": "bar",
  "encoding": {
    "x": {"aggregate": "sum", "field": "yield"},
    "y": {"field": "variety", "sort": {"op": "sum", "field": "crookston"}},
    "color": {"field": "site"}
  }
}