Как указать Rule Line с одним значением в VegaLite? - PullRequest
1 голос
/ 14 января 2020

Можно указать правило как кодирование данных. Но иногда это слишком многословно. Есть ли более короткий способ указать его только одним числом?

В приведенном ниже примере я хочу нарисовать горизонтальную линию с y=1, и для этого требуется указать преобразование вычисления. Интересно, можно ли с чем-нибудь более компактным, например:

"layer": [
  ...,
  { "mark": { "type": "rule", "y": 1 }, // Specify ruler with just a single line
  ...
]

Детская площадка

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "transform":[
    { "calculate": "1", "as": "one" }
  ],
  "layer": [
    {
      "mark": { "type": "bar" },
      "encoding": {
        "x": { "field": "diff", "type": "quantitative" },
        "y": { "field": "diff", "type": "quantitative" }
      }
    },
    {
      "mark": { "type": "rule" },
      "encoding": {
        "y": { "field": "one", "type": "quantitative" }
      }
    }
  ],
  "data": {
    "values": [
      { "diff": 1 },
      { "diff": 2 },
      { "diff": 3 }
    ]
  }
}

1 Ответ

2 голосов
/ 15 января 2020

Вы можете указать одно значение, используя поле "value" в кодировке; например,

{
  "mark": { "type": "rule" },
  "encoding": {
    "y": { "value": 133 }
  }
}

( Playground )

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

Если вы хотите указать значение в области данных, такой краткой записи нет. Вы должны либо использовать преобразование (как вы делали в своем вопросе), либо определить новый набор данных для вашего слоя. Я думаю, что самый компактный способ сделать это примерно так:

{
  "mark": { "type": "rule" },
  "data": {"values": {"y": 1}},
  "encoding": {
    "y": { "field": "y" }
  }
}
...