改造Vega美国总统时间线为支持多任期的加拿大总理时间线
Vega多任期时间线改造方案
首先直接排除重复添加同名字段的做法:JSON标准不支持对象内存在重复键名,后面写的enter、leave会直接覆盖前面的值,根本存不下多段任期,这个方案从语法层面就走不通。
数组嵌套存储多段任期的思路是对的,但只改数据结构不够,还要配套调整Vega里的数据转换逻辑,不然原有代码读不到嵌套的任期数据。
具体修改步骤
- 第一步:统一数据结构
所有人物条目都用嵌套数组存任期,单任期人物的数组里只放1个任期对象即可,不用为单任期人物单独做兼容。比如有两段任期的加拿大首任总理Macdonald的数据可以写成:{ "label": "Macdonald", "born": -5185785600000, "died": -2472940800000, "terms": [ {"enter": -3282854400000, "leave": -3097353600000}, {"enter": -2946758400000, "leave": -2667283200000} ] } - 第二步:添加扁平化数据转换
原有官方示例是直接读取每条人物数据的顶层enter、leave字段绘制任期条,你需要在对应数据源的transform配置里加一段flatten转换,把嵌套的任期数组拆成独立行,再把任期的起止时间映射回顶层的enter、leave字段,这样后面的绘制逻辑几乎不用改:"transform": [ {"type": "flatten", "fields": ["terms"], "as": "term"}, {"type": "formula", "as": "enter", "expr": "datum.term.enter"}, {"type": "formula", "as": "leave", "expr": "datum.term.leave"} ] - 第三步:检查细节配置
扁平化之后同一个人物会对应多条数据,要注意两个点:- y轴的分类比例尺直接用
label字段做维度即可,ordinal比例尺会自动去重,不会出现同一个人名在y轴重复排列的问题 - 如果需要给不同任期做区分(比如标注不同任期的党派、届数),直接在数组里的单个任期对象上加对应字段就行,扁平化之后这些字段会直接保留在数据行里,可以直接用来映射颜色、添加文本标注。
- y轴的分类比例尺直接用
内容的提问来源于stack exchange,提问作者user1930469
相关产品推荐
相关产品推荐

