Vega-Lite 数据分面可视化完全指南
2025-07-08 04:40:48作者:舒璇辛Bertina
什么是分面可视化
分面可视化(Faceted Visualization),也称为Trellis Plot或Small Multiples,是一种将数据按照某个维度分割成多个子集,并在多个相似的子图中分别展示这些子集数据的可视化技术。这种技术特别适合用于比较不同数据子集之间的模式和差异。
Vega-Lite中的两种分面方式
Vega-Lite提供了两种创建分面视图的方法:
1. 分面操作符(Facet Operator)
这是最灵活的分面方式,允许与其他视图组合操作符一起使用。基本语法结构如下:
{
"facet": {
// 分面定义
},
"spec": // 子图规格
}
分面规格包含以下关键属性:
facet
: 定义如何分面数据spec
: 定义每个分面子图的展示方式columns
: 控制分面网格的列数
分面字段定义
分面字段定义包含:
bin
: 是否对连续字段进行分箱field
: 数据字段名timeUnit
: 时间单位转换type
: 数据类型header
: 分面标题配置
行/列分面映射
通过facet
属性可以定义行和列的映射关系:
column
: 列分面定义row
: 行分面定义
2. 分面编码通道(Facet Encoding Channels)
这是一种快捷方式,Vega-Lite会自动将其转换为使用分面操作符的规格。包括:
facet
通道row
通道column
通道
这些通道除了支持基本字段定义外,还可以包含:
align
: 子图对齐方式center
: 是否居中spacing
: 子图间距columns
: 仅facet
通道支持,控制分面网格列数
分面标题(Headers)
类似于位置通道的坐标轴,分面通道的标题(header)提供了每个行和列所代表数据值的引导。可以通过header配置自定义标题的显示方式。
实际应用示例
行分面直方图
创建一个按"origin"字段垂直分面的"horsepower"直方图,展示不同产地(欧洲、日本、美国)汽车的功率分布。
使用分面操作符:
{
"facet": {
"row": {"field": "origin", "type": "nominal"}
},
"spec": {
"mark": "bar",
"encoding": {
"x": {"bin": true, "field": "horsepower", "type": "quantitative"},
"y": {"aggregate": "count", "type": "quantitative"}
}
}
}
使用行编码通道(等效但灵活性较低):
{
"mark": "bar",
"encoding": {
"row": {"field": "origin", "type": "nominal"},
"x": {"bin": true, "field": "horsepower", "type": "quantitative"},
"y": {"aggregate": "count", "type": "quantitative"}
}
}
网格分面
同时使用行和列编码通道可以创建网格状的小倍数图:
{
"mark": "point",
"encoding": {
"row": {"field": "Cylinders", "type": "ordinal"},
"column": {"field": "Origin", "type": "nominal"},
"x": {"field": "Horsepower", "type": "quantitative"},
"y": {"field": "Miles_per_Gallon", "type": "quantitative"}
}
}
自动换行分面
当分面数量较多时,可以使用facet
通道并设置columns
属性实现自动换行:
{
"mark": "point",
"encoding": {
"facet": {
"field": "variety",
"type": "nominal",
"columns": 4
},
"x": {"field": "yield", "type": "quantitative"},
"y": {"field": "site", "type": "nominal"}
}
}
分辨率控制(Resolve)
默认情况下,分面子图共享比例尺、坐标轴和图例。可以通过设置resolve
为"independent"
来覆盖这一行为,使每个子图使用独立的比例尺:
{
"facet": {...},
"spec": {...},
"resolve": {
"scale": {"x": "independent", "y": "independent"}
}
}
分面配置
可以在顶层配置对象中设置分面的全局配置:
{
"config": {
"facet": {
"spacing": 20, // 子图间距
"columns": 3 // 默认列数
}
}
}
最佳实践建议
- 对于简单分面,使用编码通道更简洁
- 需要与其他视图组合或需要更复杂配置时,使用分面操作符
- 分类数据最适合用于分面,连续数据应先进行分箱处理
- 分面数量不宜过多,通常不超过20个
- 考虑使用
columns
属性控制自动换行 - 适当调整子图间距提高可读性
通过灵活运用Vega-Lite的分面功能,可以创建出信息丰富且易于比较的多视图可视化效果。