vega-lite:如何将 JSON 中的日期指定为包含年、月和日数的单独字段?

Posted

技术标签:

【中文标题】vega-lite:如何将 JSON 中的日期指定为包含年、月和日数的单独字段?【英文标题】:vega-lite: how to specify date in JSON as separate fields containing year, month, and day numbers? 【发布时间】:2019-07-17 01:45:21 【问题描述】:

我的 JSON 数据是一个对象列表,每个对象都包含这种格式的日期:

  "date" : 
    "year" : 2019,
    "month" : 2,
    "day" : 17
  ,

我如何告诉 Vega-lite 这是一个约会? 我通过创建另一个 day 字段来解决这个问题,该字段是连接这三个字段的字符串,并使用:

    "format" : 
      "parse" : 
        "day" : "date: '%Y %m %d'"
      

但我希望能够只使用现有的 3 个字段....

【问题讨论】:

【参考方案1】:

您可以使用计算转换以及datetime 表达式来执行此操作。例如(vega-editor link):


  "data": 
    "values": [
      "date": "year": 2019, "month": 2, "day": 15, "val": 1,
      "date": "year": 2019, "month": 2, "day": 16, "val": 2,
      "date": "year": 2019, "month": 2, "day": 17, "val": 4,
      "date": "year": 2019, "month": 2, "day": 18, "val": 3,
      "date": "year": 2019, "month": 2, "day": 19, "val": 5,
      "date": "year": 2019, "month": 2, "day": 20, "val": 6
    ]
  ,
  "transform": [
    
      "calculate": "datetime(datum.date.year, datum.date.month, datum.date.day)",
      "as": "combined"
    
  ],
  "mark": "area",
  "encoding": 
    "x": "field": "combined", "type": "temporal",
    "y": "field": "val", "type": "quantitative"
  

【讨论】:

这很有帮助,谢谢!为什么第 2 个月被认为是 3 月而不是 2 月?有没有办法在你上面写的计算表达式中从月份中减去一个?修订:更改为 datum.date.month - 1 个作品! 进一步修订:从零开始的月份确实是日期时间()的记录行为 是的,根据文档:vega.github.io/vega/docs/expressions/#datetime,月份是从零开始的。如果您想使用正常的基于 1 的月份,您可以在计算表达式中将其更改为 date.month - 1

以上是关于vega-lite:如何将 JSON 中的日期指定为包含年、月和日数的单独字段?的主要内容,如果未能解决你的问题,请参考以下文章

Vega-lite 从数据中设置颜色,同时保留图例

如何更改 Vega-lite 条形图中条形的颜色?

JSON如何反序列化日期时间并将UTC转换为指定时区?

使用 altair / vega-lite / vega-embed 控制画布大小

如何在我的 vega-lite 图表中添加辅助 Y 轴?

Vega-Lite:数据中的笔触颜色值?