Julia 可视化库:VegaLite.jl 【笔记8 - transform 之 filter】

filter 特性

// Json 版本
{
  ...
  "transform": [
      // Filter Transform
      {"filter": ...} 
     ...
  ],
  ...
}
# Julia 版本
@vlplot(
    ...
    transform=[
        {filter= ...},
        ...
    ],
    ...
)

filter 的值为逻辑值有以下四种情况:

  1. 表达式字符串,以 datum 标示当前输入数据对象。如 filter="datum.a > 60" 表示筛选出数据中字段为 a ,其值大于 60 的整个数据对象。

  2. 包含以下字段谓语: equal (等于), lt (小于), lte (小于等于), gt (大于), gte (大于等于), range (表示数值或者时间范围), oneOf (表示属于某个集合)。

    filter={field=:car_color, equal=”red”}} 表示筛选 car_colorred 的数据对象; filter={field=:car_color, oneOf=[“red”, “yellow”]}} 表示筛选 car_colorred 或者 yellow 的数据对象。

  3. selection predicate。参见: https://vega.github.io/vega-lite/docs/filter.html#selection-predicate

  4. 前三种情况的组合。

栗子

画出 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"]}
        }
    }
)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37952030/article/details/81586529