vega-lite - 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通常可以很好地生成标签而无需进一步配置,因此了解为什么这不适用于特定宽度的此类数据是我所追求的。
那么,我的配置是否缺少某些内容?除了我提到的解决方法之外,我还有其他选择吗?
解决方案
标签的位置和格式是根据图表的内容和可用空间自动确定的(这样标签就不会重叠)。如果自动结果不是您想要的,您可以使用适当的轴标签和刻度属性更紧密地控制刻度位置和标签。
例如,这里我们使用d3 时间格式来精确指定日期标签的格式:
"encoding": {
"x": {
"field": "timestamp",
"type": "temporal",
"scale": {"type": "utc"},
"axis": {"format": "%b %e, %I%p"}
},
"y": {"field": "amount", "type": "quantitative"}
}
编辑器中的完整图表规范
推荐阅读
- javascript - findOneAndUpdate 不是 mongoose 的函数
- javascript - 将javascript文件拆分为多个文件
- node.js - 使用云功能创建后更新 firestore 文档字段
- java - 如果我们总是把 Exception 对象放在 catch 块中,那么 finally 块就不需要了吗?
- ember.js - 升级到 Ember 3.20.2 后获取模型未定义错误
- publish-subscribe - 什么是 DCPS,它与 DDS 有什么关系?
- javascript - Socket JS 在 onload 方法中不起作用
- dolphindb - 与范围域和列表域相比,哈希域的主要应用是什么?
- spring-boot - 放心使用 Spring Boot 和 Kotlin 进行 E2E Api 测试
- python - 托盘图标在窗口启动文件夹(.pyw 扩展名)上不起作用