如何基于rank字段对Vega-Lite柱状图Y轴分类值排序?
解决Vega-Lite柱状图Y轴按rank字段排序的问题
你当前代码无法实现按rank排序Y轴分类,核心问题是排序逻辑放错了位置:你把order属性加在了x字段里,但控制Y轴nominal类型分类排序的正确位置是y字段的sort参数。另外代码中第二个layer存在重复定义x字段的问题,需要修正。
修改后的完整代码
{ "background": "#F2F2F2", "height": "container", "width": "container", "data": { "values": [ {"x": "Japan", "y": 46, "rank":1,"img": "https://cdn.countryflags.com/thumbs/japan/flag-800.png"}, {"x": "China", "y": 30,"rank":3 ,"img": "https://www.countryflags.com/wp-content/uploads/china-flag-png-large.png"}, {"x": "Russia", "y": 20,"rank":2, "img": "https://cdn.countryflags.com/thumbs/russia/flag-800.png"}, {"x": "Australia", "y": 46,"rank":4, "img": "https://www.countryflags.com/wp-content/uploads/flag-jpg-xl-9-2048x1024.jpg"} ] }, "layer": [ { "mark": {"type":"bar","height": {"band": 0.1},"color":"#73171F" }, "encoding": { "y": {"field": "x", "type": "nominal","axis":null, "sort": {"field": "rank", "order": "ascending"}}, "x": {"field": "y", "type": "quantitative","axis":null} } }, { "mark": { "type": "image", "width": 50, "height": 50, "baseline": "middle" }, "encoding": { "y": {"field": "x", "type": "nominal", "sort": {"field": "rank", "order": "ascending"}}, "x": {"value": -90}, "url": {"field": "img", "type": "nominal"} } }, { "mark": { "type": "text", "baseline": "middle", "align": "left" }, "encoding": { "y": {"field": "x", "type": "nominal", "sort": {"field": "rank", "order": "ascending"}}, "x": {"value": -50}, "text": {"field": "x", "type": "nominal"}, "color": {"value": "#535945"} } }, { "mark": { "type": "text", "baseline": "middle", "align": "left" }, "encoding": { "y": {"field": "x", "type": "nominal", "sort": {"field": "rank", "order": "ascending"}}, "x": {"value": -150}, "text": {"field": "rank", "type": "quantitative", "format":"d"}, "color": {"value": "#535945"} } } ] }
关键修改点说明
- Y轴排序设置:在每个layer的
y编码中添加sort: {"field": "rank", "order": "ascending"},明确指定按rank字段升序排列Y轴的国家名称。因为是分层图表,所有使用y字段的layer必须保持一致的排序规则,否则会出现元素错位。 - 修复重复字段定义:第二个layer中原本重复定义了两个
x字段,删除了多余的{"field": "y", "type": "quantitative"},保留固定位置的x: {"value": -90}。
内容的提问来源于stack exchange,提问作者anshika pandey
相关产品推荐
相关产品推荐

