Vega-lite:为什么图形宽度会影响轴标签的格式?

Vega-lite: Why does graph width affect how the axis labels are formatted?

在渲染 X 轴基于时间戳的图形时,该时间戳表示为自 Unix 纪元以来的秒数,我观察到生成的标签中的奇怪行为 对于特定的图形宽度。我已经对 vega-lite 在线编辑器进行了实验,其中包含我的数据集的精简版本和基本配置选项。当宽度指定在 521-594 之间时,时间戳标签呈现为几天的时间(重复早上 6 点、下午 6 点):

这些标签含糊不清。在其他宽度下,生成的标签是我所期望的:

请参阅 this vega-lite editor 并修改宽度以了解超出 521-594 范围对 X 轴上的标签有何影响。

关于在此配置中使用 "scale": {"type": "utc"} 的一件事:删除此 确实 解决了标签问题,但显示的时间不是我想要的。它以当地时间而不是 UTC 显示。

我想出了一些解决方法:更改图表的宽度或指定静态标签格式。后者根据指定的格式引入了它自己的问题,因为相同的标签可以多次使用,令人困惑,例如Mon Mar 23, Mon Mar 23 当天的不同时间。

我试图通过条件格式找到 "fix" 标签的不同方法。但是,根据文档中的示例,用于创建格式的表达式似乎仅限于静态条件,如 "is this the first month of the year?" 而不是关系条件,如 "is the day for this label the same as the previous label?" 如果可以通过格式化生成更多动态轴标签,我'我愿意接受这个建议。但是,vega-lite 通常 无需进一步配置即可很好地生成标签,因此了解为什么它不适用于此类数据 在特定宽度 更符合我的要求。

那么,我的配置是不是遗漏了什么?除了我提到的解决方法之外,我还有其他选择吗?

标签位置和格式是根据图表内容和可用的 space 自动确定的(这样标签就不会重叠)。如果自动结果不是您想要的,您可以使用适当的轴 label and tick 属性更严格地控​​制刻度位置和标签。

例如,这里我们使用d3 time formats来精确指定日期标签的格式:

  "encoding": {
    "x": {
      "field": "timestamp",
      "type": "temporal",
      "scale": {"type": "utc"},
      "axis": {"format": "%b %e, %I%p"}
    },
    "y": {"field": "amount", "type": "quantitative"}
  }

editor

中的完整图表规范