Vega-Lite Calculated Scale 域最大

Vega-Lite Calculated Scale domainMax

我正在尝试计算 Y 轴刻度上的 domainMax 值。我尝试了以下示例,其中我希望 Y 轴 domainMax 比名为“value”的数据集字段中的最大值大 1。该示例产生错误 'Unrecognized signal name: "domMax"'。我怎样才能让它工作?

{
  "data": {
    "values": [
      {"date": "2021-03-01T00:00:00", "value": 1},
      {"date": "2021-04-01T00:00:00", "value": 3},
      {"date": "2021-05-01T00:00:00", "value": 2}
    ]
  },
  "transform": [
    { "calculate": "max(datum.value)+1","as": "domMax"}
  ],
  "mark": "line",
  "encoding": {
    "x": {
      "field": "date",
      "type": "temporal"
    },
    "y": {"field": "value", "type": "quantitative",
      "scale": {"domainMax": {"expr": "domMax"}}
    }
  }
}
  1. 这个变换

    "transform": [
        { "calculate": "max(datum.value)+1","as": "domMax"}
     ]
    

    向您的数据集添加一个新列 - 它不会创建新信号。您可以检查 in the editor。转到 DataViewer 选项卡,然后从下拉列表中选择 select data_0。你能看到新的 domMax 列吗?

  1. 信号是完全不同的东西——看看文档中的 here。请注意 link 指向 Vega,而不是 Vega-Lite。 (Vega-Lite 规格被编译为 Vega。)

  2. Vega-Lite 不允许你声明信号;您改为声明参数。这里是 another example 使用 domMax 参数。 Vega-Lite 参数被转换为 Vega 信号。

  3. 您似乎正试图从数据中推导出 parameter/signal 的值。我不确定您是否可以在 Vega-Lite.

    中做到这一点
  4. 另一方面,这在 Vega 中非常容易。例如,您可以使用范围变换: https://vega.github.io/vega/docs/transforms/extent/

旁注 - 虽然 Vega 规范更为冗长,但您有时会发现它们的原语更简单,并且是理解可视化工作原理的好方法。 (可以在编辑器中看到编译好的Vega。)

我尝试根据数据获取自定义域,但遇到了与您相同的限制。

就我而言,我从外部更新数据有点像 the streaming example。我从外部计算域并在可视化中使用参数修改它们。这很容易,因为 vega-lite 参数被暴露为 vega 信号。

这是布局的要点:

  {
    "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
    "params": [
      {
        "name": "lowBound",
        "value": -10
      },
      {
        "name": "highBound",
        "value": 100
      }
    ],
    ../..
    "vconcat": [
      {
        "name": "detailed",
        ../..
        "layer": [
          { 
            ../..
            "mark": "line",
            "encoding": {
              "y": {
                "field": "value",
                "title": "Temperature",
                "type": "quantitative",
                "scale": {
                  "domainMin": {
                    "expr": "lowBound"
                  },
                  "domainMax": {
                    "expr": "highBound"
                  }
                }
              },
...

lowBoundhighBound是通过vega信号动态变化的。我用常规 JS API.

更改它们