Сложенный график Vega Lite с текстом категории в середине баров

#vega-lite

Вопрос:

Я хотел бы разместить ярлыки категорий в центре моих баров в спецификации vega lite. Я хочу, чтобы это выглядело примерно так:

введите описание изображения здесь

Ответ №1:

Вы можете использовать stack преобразование в сочетании с calculate преобразованием, которое вычисляет среднюю точку между началом и концом для вычисления размещения меток.

Вот пример (или просмотр в редакторе vega lite здесь)

Обратите внимание, что aggregate преобразование необходимо только потому, что в этом наборе данных имеется одна строка в год.

 {
  "data": {"url": "data/barley.json"},
  "width": 1000,
  "transform": [
     {
      "aggregate": [{
       "op": "sum",
       "field": "yield",
       "as": "yield"
      }],
      "groupby": ["site", "variety"]
    },
     {
        "stack": "yield",
        "groupby": ["variety"],
        "sort": [{"field": "site", "order": "descending"}]
      },
      {
        "calculate": "(datum.yield_start  datum.yield_end)/2",
        "as": "sum_yield_mid"
      }
  ],
  "layer": [
    {
      "mark": {"type": "bar"},
      "encoding": {
        "x": {"type": "nominal", "field": "variety"},
        "y": {"type": "quantitative", "field": "yield_start"},
        "y2": {"type": "quantitative", "field": "yield_end"},
        "color": {"type": "nominal", "field": "site"}
      }
    },
    {
      "mark": {"type": "text", "color": "black"},
      "encoding": {
        "y": {"field": "sum_yield_mid", "type": "quantitative"},
        "text": {"field": "site"},
        "x": {"type": "nominal", "field": "variety"}
      }
    }
  ]
}