filter
特性
// Json 版本
{
...
"transform": [
// Filter Transform
{"filter": ...}
...
],
...
}
# Julia 版本
@vlplot(
...
transform=[
{filter= ...},
...
],
...
)
filter
的值为逻辑值有以下四种情况:
表达式字符串,以
datum
标示当前输入数据对象。如filter="datum.a > 60"
表示筛选出数据中字段为 a ,其值大于 60 的整个数据对象。包含以下字段谓语: equal (等于), lt (小于), lte (小于等于), gt (大于), gte (大于等于), range (表示数值或者时间范围), oneOf (表示属于某个集合)。
如 filter={field=:car_color, equal=”red”}} 表示筛选 car_color 为 red 的数据对象; filter={field=:car_color, oneOf=[“red”, “yellow”]}} 表示筛选 car_color 为 red 或者 yellow 的数据对象。
selection predicate。参见: https://vega.github.io/vega-lite/docs/filter.html#selection-predicate
前三种情况的组合。
栗子
画出 cars 数据集中,1980年至1982年美国地区的汽车情况。
using VegaLite, VegaDatasets
dataset("cars") |>
@vlplot(
transform=[
{filter="datum.Origin=='USA'"}, # 注意字符串内层使用的单引号
{filter={field=:Year, oneOf=["1980-01-01", "1981-01-01", "1982-01-01"]}},
],
:point,
x={:Acceleration, scale={zero=false}}, # 坐标范围不从 0 开始
y={:Horsepower, scale={zero=false}},
color="Cylinders:n",
title="USA"
)
应用
描绘20世纪世界人口各年龄段性别比例构成情况。
using VegaLite, VegaDatasets
dataset("population") |>
@vlplot(
:bar,
transform=[
{filter={field=:year, range=[1900, 2000]}},
{calculate="datum.sex==2 ? 'Female' : 'Male'",as="gender"}
],
enc={
y={
"sum(people)",
axis={title="population"},
stack=:normalize # 归一化
},
x={
"age:o",
scale={rangeStep=30} # 调整柱子的宽度
},
color={
"gender:n",
scale={range=["#c30d24", "#1770ab"]}
}
}
)