在 vega-lite 中参数化日期时间

问题描述

我正在尝试绘制温度与时间的简单折线图。

我正在尝试为日期时间创建一个参数(例如滑块)(以确定范围),但我无法获得一个使用日期时间类型的参数。我改为将年、月和日作为单独的(整数)参数:

  "params": [
    {
      "name": "lowYear","value": 2021,"bind": {"input": "range","min": 2020,"max": 2022,"step": 1}
    },{
      "name": "lowMonth","value": 1,"min": 1,"max": 12,{
      "name": "lowDay","max": 31,"step": 1}
    }
]

我可以轻松地对日期时间应用过滤器,但是当我对这些值使用表达式时,这会失败。

  "transform": [
    {
      "filter": {
        "field": "timestamp","gte": {"year": 2021,"month": 2,"date": 20}
      }
    }
  ]

但这失败了:

  "transform": [
    {
      "filter": {
        "field": "timestamp","gte": {"year": {"expr": "lowYear"},"date": 20}
      }
    }
  ]

过滤器似乎可以接受表达式,但嵌套在 datetime 中时可能不能。是这种情况吗?如何参数化日期时间?

解决方法

不确定您是否还在寻找这个问题的答案,但我遇到了类似的问题,现在我已经解决了。

我的问题涉及根据从范围控件中选择的年份,让 x 轴的刻度代表整个 12 个月,即使在 12 月不存在任何数据。

scale: {"domain" :[{"expr":"datetime(AnnualPeriod,1)"},{"expr":"datetime(AnnualPeriod,11,31)"}]}

其中“AnnualPeriod”是绑定到范围控件的数据字段

"params": [{"name" : "AnnualPeriod","value": 2019,"bind" : {"input": "range","min":1995,"max":2020,"step":1}}],

使用此过滤器按年份过滤数据:

transform:[{"filter":"year(datum.date_of_transfer)===AnnualPeriod"}],

我认为对你有帮助的是:

{"expr":"datetime(AnnualPeriod,1)"}

其中 AnnualPeriod 相当于您的 lowYear,月份是 0 表示 January1 第一个

所以你应该阅读:

"gte": {"expr":"datetime(lowYear,1,20)"}

注意数月的从零开始的数组。 1 = 2 月