首页 > 解决方案 > Vega-lite:为什么图形宽度会影响轴标签的格式?

问题描述

在渲染 X 轴基于时间戳的图形时,时间戳表示为自 Unix 纪元以来的秒数,我观察到生成的特定图形宽度标签中的奇怪行为。我已经尝试了 vega-lite 在线编辑器,它带有我的数据集的精简版本和只有基本的配置选项。当宽度指定在 521-594 之间时,时间戳标签会在几天内呈现为时间(重复 6AM、6PM):

只有时间的图表

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

带有日期和时间的图表

查看这个 vega-lite 编辑器并修改宽度以查看超出 521-594 范围如何影响 X 轴上的标签。

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

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

我试图通过条件格式找到不同的方法来“修复”标签。但是,根据文档中的示例,用于创建格式的表达式似乎仅限于静态条件,例如“这是一年中的第一个月吗?” 而不是诸如“此标签的日期与前一个标签的日期相同吗?”之类的关系问题。如果可以通过格式化生成更多动态轴标签,我愿意接受这个建议。但是,vega-lite通常可以很好地生成标签而无需进一步配置,因此了解为什么这不适用于特定宽度的此类数据是我所追求的。

那么,我的配置是否缺少某些内容?除了我提到的解决方法之外,我还有其他选择吗?

标签: vega-lite

解决方案


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

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

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

在此处输入图像描述

编辑器中的完整图表规范


推荐阅读