如何在Vega/Deneb多层图表中添加全局Rule Mark?
Vega/Deneb全局Rule Mark添加问题求助
我是Vega/Deneb新手,想在条形图里加一条全局的Rule Mark(比如x=0.95的竖线),但试了两种方法都出问题:
尝试情况
- 在layer数组内添加Rule Mark图层:每个条形旁边都生成了一条短的Rule Mark,不是贯穿整个图表的全局竖线
- 在layer数组外单独加Rule Mark:整个图表布局直接乱了,元素错位
原代码
{ "$schema": "https://vega.github.io/schema/vega-lite/v5.json", "description": "A simple bar chart with embedded data.", "data": { "values": [ {"a": "A", "b": 1}, {"a": "B", "b": 1}, {"a": "C", "b": 0.7455}, {"a": "D", "b": 0.8}, {"a": "E", "b": 0.9402} ] }, "encoding": { "y": { "field": "a", "type": "nominal", "axis": null }, "x": { "field": "b", "type": "quantitative", "axis": {"format": ".0%", "values": [0, 0.5, 1]} } }, "layer": [ { "mark": { "type": "bar", "color": {"expr": "datum.b < 0.95 ? '#910049' : '#00477e'"}, "tooltip": true } }, { "mark": {"type": "text", "align": "right", "dx": -5}, "encoding": { "text": { "field": "b", "type": "quantitative", "format": ".0%" } } }, { "mark": {"type":"text", "align": "left", "dx": 5}, "encoding": { "x": {"datum": 0}, "text": { "field": "a", "type": "nominal" } } }, { "mark": "rule", "encoding": { "x": {"datum": 0.95} } } ] }
解决方法
问题根源是Rule Mark图层继承了顶层的y轴编码(按a字段分组),所以每条y轴类别都生成了一条短规则。只需在Rule Mark图层里显式清除y轴编码,就能让它变成贯穿整个图表的全局竖线。
修改后的Rule Mark图层代码:
{ "mark": "rule", "encoding": { "x": {"datum": 0.95}, "y": null // 清除继承的y轴编码,规则自动延伸整个y轴高度 } }
替换原代码里对应的Rule Mark图层即可,最终生成的图表会有一条x=0.95的全局竖线,不会再重复出现。
内容的提问来源于stack exchange,提问作者WhoKnowss
相关产品推荐
相关产品推荐

