Vega-Lite Facet图独立Y轴配置问题(Y为数组字段)
解决Vega-Lite动态分面独立Y轴问题
要实现每个产品分面仅显示自身版本的独立Y轴,无需硬编码vconcat,可通过以下方式实现:
核心方案
借助Vega-Lite的分面布局+数据变换,为每个产品生成专属版本集合,让每个分面的Y轴自动匹配对应产品的版本范围。
具体步骤
数据预处理:提取各产品专属版本
通过聚合和窗口变换,为每条数据标记所属产品的完整版本列表:"transform": [ { "aggregate": [{"op": "values", "field": "version", "as": "product_versions"}], "groupby": ["product"] }, { "window": [{"field": "product_versions", "as": "product_versions"}], "groupby": ["product"] } ]分面与独立轴配置
使用facet生成动态分面,在Y轴配置中绑定当前产品的版本集合作为轴定义域:"facet": { "row": {"field": "product", "header": {"title": "产品"}} }, "spec": { "mark": "point", "encoding": { "y": { "field": "version", "type": "ordinal", "axis": { "domain": {"data": "source", "field": "product_versions"}, "labelAngle": 0 } }, "x": {"field": "metric", "type": "quantitative"} } }关键说明
- 无需硬编码产品数量,分面会根据数据自动生成
product_versions字段存储了对应产品的所有版本,轴的定义域会动态适配当前分面- 版本字段设为
ordinal类型,保证标签按合理顺序排列
完整示例代码
{ "$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"name": "data"}, "transform": [ { "aggregate": [{"op": "values", "field": "version", "as": "product_versions"}], "groupby": ["product"] }, { "window": [{"field": "product_versions", "as": "product_versions"}], "groupby": ["product"] } ], "facet": { "row": {"field": "product", "header": {"title": "产品"}} }, "spec": { "mark": "point", "encoding": { "y": { "field": "version", "type": "ordinal", "axis": { "domain": {"data": "source", "field": "product_versions"}, "labelAngle": 0 } }, "x": {"field": "value", "type": "quantitative", "title": "指标值"} } } }
内容的提问来源于stack exchange,提问作者hsavy
相关产品推荐
相关产品推荐

