如何在VegaLite中用单个值指定“规则线”?

时间:2020-01-14 20:53:46

标签: vega vega-lite

可以将Rule指定为对数据进行编码。但是有时候太冗长了。有没有一种简单的方法可以只用一个数字来指定它?

在下面的示例中,我想用y=1画一条水平线,这需要我指定一个计算变换。想知道是否有可能使用更紧凑的东西,例如:

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

Playground

{
  "$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 个答案:

答案 0 :(得分:3)

您可以使用编码中的"value"字段指定一个值;例如

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

Playground

但是请注意,该值是轴域中的值,而不是数据域中的值;即代表图表左上方的像素。

如果要在数据域中指定一个值,则没有这样的简写。您必须使用转换(如您在问题中所做的那样)或为图层定义新的数据集。我认为,最紧凑的方式是这样的:

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