You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia Algebra of Graphics多数据集自动着色方法技术问询

在Algebra of Graphics中实现多数据集自动着色

问题根源

你当前的代码是将多个独立的data对象相加,每个对象对应一个数据集,但没有给这些数据集添加分组标识,因此Algebra of Graphics(AoG)无法自动区分不同数据集并分配颜色。

解决方案:通过分组列实现自动着色

AoG和Makie支持自动着色,核心是将所有数据合并到同一个DataFrame中,并添加一个分组列(比如标识不同数据集的编号或名称),然后在mapping中指定color映射到这个分组列,AoG会自动为每个分组分配不同颜色。

修正后的代码

using AlgebraOfGraphics, DataFrames, ColorSchemes, CairoMakie

function filterPlot(filterPos; xlab="Time (d)", ylab="Weight")
    # 将所有数据集合并到带分组列的DataFrame中
    combined_df = vcat([
        DataFrame(xx=1:length(thing), yy=thing, series=i)
        for (i, thing) in enumerate(filterPos)
    ]...)

    # 定义绘图映射:指定x、y轴,同时将color映射到分组列series
    plt = data(combined_df) *
          mapping(:xx => identity => xlab, :yy => identity => ylab) *
          mapping(color=:series) *
          visual(Lines)  # 指定绘制线条,若需点可替换为Scatter

    # 绘制图形,可指定调色板(不指定则用默认)
    drawing = draw(plt; 
                   axis=(xlabel=xlab, ylabel=ylab),
                   palettes=(; color=ColorSchemes.tab10.colors))  # tab10支持最多10个不同颜色
    return drawing
end

关键说明

  • 分组列的作用:series列作为每个数据集的唯一标识,AoG会根据这个列的不同值自动分配颜色。
  • 自动调色板:如果不指定palettes参数,AoG会使用默认的颜色循环方案,足够应对大多数场景;若需要自定义调色板,可像示例中那样指定ColorSchemes的调色板(比如tab10支持10种不同颜色,适合多数据集场景)。
  • 替代写法:如果不想手动创建分组列,也可以用data(filterPos)结合mapping的group参数,但合并成单一DataFrame的方式更直观且易于扩展。

补充说明

Makie生态(包括AoG)的自动着色逻辑和Matplotlib类似,都是基于数据分组来识别需要区分的系列,只要正确提供分组标识,就能自动完成颜色分配,无需手动为每个数据集设置颜色。

内容的提问来源于stack exchange,提问作者Mstislav Keldysh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:26:16