vega-lite - 如何设置Vega-Lite时间序列图x轴的最大值和最小值?

标签 vega-lite

我正在使用 Vega-Lite 制作时间序列图表,我想独立于显示的值设置 x 轴的最小值和最大值。原因是我在单独的图表中并排显示多个时间序列,并且我希望它们的 x 轴对齐,即使某些序列比其他序列开始得早。

我找到了encoding.x.scale.domain ,这似乎是正确的使用属性。 The documentation表示对于时间字段,这应该是时间戳的两个元素数组。但是,我将其设置为什么似乎并不重要,我的图表没有渲染任何线条,x轴上也没有任何刻度,并且警告字段“数据”的无限范围:[Infinity,-Infinity ]" 打印在控制台中。

更令人困惑的是,我已经能够通过以相同的方式设置 encoding.y.scale.domain 来控制 y 轴。

以下是我在 Vega 编辑器中尝试过的图表规范的简化版本。我尝试将 x 轴设置为在比实际值更早的时间点开始并在比实际值更晚的时间点结束:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {
    "values": [
      {"ts": 1500400000000, "v": 1},
      {"ts": 1500500000000, "v": 2},
      {"ts": 1500600000000, "v": 3},
      {"ts": 1500700000000, "v": 2}
    ]
  },
  "width": 800,
  "height": 300,
  "mark": {"type": "line"},
  "encoding": {
    "x": {"field": "ts", "type": "temporal", "scale": {"domain": [1500000000000, 1500900000000]}},
    "y": {"field": "v", "type": "quantitative", "scale": {"domain": [0, 5]}}
  }
}

如果我删除 encoding.x.scale.domain 属性,它会呈现一条线,但是当包含它时,我无法找出任何不会导致警告的值。

这是否是设置 x 轴最小值和最大值的正确方法?为什么它适用于 y 轴而不适用于 x 轴?正确的做法是什么?

最佳答案

您尝试的是在 Vega-Lite 中指定时域的正确方法,但此行为存在 Vega-Lite 4.5 中引入的错误。以下是使用 Vega-Lite 4.4 的规范结果:

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm//vega@5"></script>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm//vega-lite@4.4"></script>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm//vega-embed@6"></script>
</head>
<body>
  <div id="vis"></div>
  <script>
      var spec = {
        "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
        "data": {
          "values": [
            {"ts": 1500400000000, "v": 1},
            {"ts": 1500500000000, "v": 2},
            {"ts": 1500600000000, "v": 3},
            {"ts": 1500700000000, "v": 2}
          ]
        },
        "width": 800,
        "height": 300,
        "mark": {"type": "line"},
        "encoding": {
          "x": {"field": "ts", "type": "temporal", "scale": {"domain": [1500000000000, 1500900000000]}},
          "y": {"field": "v", "type": "quantitative", "scale": {"domain": [0, 5]}}
        }
      };
      vegaEmbed("#vis", spec);
  </script>
</body>
</html>

enter image description here

我已在 https://github.com/vega/vega-lite/issues/6060 提交了错误报告

关于vega-lite - 如何设置Vega-Lite时间序列图x轴的最大值和最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623578/

相关文章:

altair - 具有独立比例的共享轴标签

vega-lite - 如何将渲染器指定为 SVG?

vega-lite - vega-lite 中的数据布局、图层和图例

vega-lite - 将图表标题与 y 轴上数字的左侧对齐

python - 有没有办法用分箱数据反转 Altair 等值区域图的配色方案?

vega-lite - 如何使用 vega-lite 放大 map ?

charts - 折线图的 Vega-Lite 渐变

elasticsearch - Vega-lite热图将文本添加到变量

javascript - 在 Altair 绘图点击上运行 javascript