【问题标题】:Parameterize datetime in vega-lite在 vega-lite 中参数化日期时间
【发布时间】:2021-05-25 06:42:43
【问题描述】:

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

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

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

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

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

但这失败了:

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

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

【问题讨论】:

  • 这和clojure有什么关系?
  • 我最初展示的是使用 Oz(一个 clojure vega-lite 库)的示例代码
  • 嗯,好的。如果您在删除代码后留下标签,请小心。这里的资深用户通常会关注标签,并且用与我们兴趣无关的内容堵塞我们的提要是不幸的(也不能帮助您获得答案!)。我看到你删除了 clojure 标签,一切都很好。

标签: vega-lite vega


【解决方案1】:

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

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

scale: {"domain" :[{"expr":"datetime(AnnualPeriod,0,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,0,1)"}

其中 AnnualPeriod 相当于您的 lowYear,而月份为 0 代表 January1 第一个

所以你的应该是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2021-01-26
    • 2020-03-27
    • 2020-03-19
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多