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

本文介绍如何利用Julia语言中的Vega-Lite库进行数据可视化,特别是通过calculate特性实现复杂图表的构建。包括使用常量、表达式进行数据计算及生成带有1.5倍四分位距的箱线图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

calculate 特性

// Json 版本
{
  ...
  "transform": [
      // Calculate Transform
      {"calculate": ..., "as" ...}, 
      {"calculate": ..., "as" ...}, 
      {"filter": ...},
       ...
  ],
  ...
}
# Julia 版本
@vlplot(
    ...
    transform=[
        {calculate= ..., as= ...},
        {calculate= ..., as= ...},
        {filter= ...},
        ...
    ],
    ...
)
  1. calculate 的值为 expression 表达式,datum 表示当前输入的数据对象,datum.a 表示对输入数据列名为 a 的数据进行计算。

  2. expression 中默认的常量有: NaNE (常数 e e )、LN2loge2)、LN10 loge10 l o g e 10 )、LOG2E log2e l o g 2 e )、LOG10E log10e l o g 10 e )、MAX_VALUE (可表示的最大正数)、MIN_VALUE (可表示的最小正数)、PI π π )、SQRT1_2 1/2 1 / 2 )、SQRT2 2 2 )等。

  3. calculate 可与 filter 连用,对满足某些条件的数据进行计算操作。

栗子

使用 LOG10E 常量,以历史上各年龄段人口数量顶峰值与这个常量的乘积作为y轴,作出垂直线图。并将各年龄段的历史人口数情况以散点形式添加到图上。

using VegaLite, VegaDatasets
dataset("population") |>
@vlplot() + # 这里相当于定义一层 layer,"+" 表示添加图层
@vlplot(
    transform=[
        {
            calculate="LOG10E * datum.people", 
            # 相当于 log(10, e) * max(people), log(10, e) ≈ 0.434
            as=:people2
        }
    ],
    :rule,
    x="age:o",
    y="people2:q",
)+
@vlplot(
    :point,
    x="age:o",
    y="people:q"
)

这里写图片描述

应用

带有 1.5 倍四分位距的箱线图 ↓

using VegaLite, VegaDatasets
dataset("population") |>
@vlplot(
    transform=[
        {
            aggregate=[
                {op=:q1, field=:people, as=:lowerBox},
                {op=:q3, field=:people, as=:upperBox},
                {op=:median, field=:people, as=:midBox}
            ],
            groupby=[:age]
        },
        {
            calculate="datum.upperBox - datum.lowerBox",
            as=:IQR
        },
        {
            calculate="datum.lowerBox - datum.IQR * 1.5",
            as=:lowerWhisker
        },
        {
            calculate="datum.upperBox + datum.IQR * 1.5",
            as=:upperWhisker
        }
    ]
) +
@vlplot(
    mark={:rule, style=:boxWhisker},
    y={"lowerWhisker:q", axis={title="population"}},
    y2="lowerBox:q",
    x="age:o"
) +
@vlplot(
    mark={:rule, style=:boxWhisker},
    y="upperBox:q",
    y2="upperWhisker:q",
    x="age:o"
) +
@vlplot(
    mark={:bar, style=:box},
    y="lowerBox:q",
    y2="upperBox:q",
    x="age:o",
    size={value=5}
) +
@vlplot(
    mark={:tick, style=:boxMid},
    y="midBox:q",
    x="age:o",
    color={value=:white},
    size={value=5}
)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值