Altair Stack Transform 详解用 transform_stack 显式计算与绘制堆叠值【免费下载链接】altairDeclarative visualization library for Python项目地址: https://gitcode.com/gh_mirrors/al/altair导读本文聚焦 AltairPython 声明式可视化库中的Stack Transform堆叠变换讲解如何通过Chart.transform_stack()显式计算与堆叠编码stacked encoding相关联的值。你将掌握StackTransform的全部配置项stack、as_、groupby、sort、offset及底层调用机制并能够把隐式堆叠的图表改写为显式计算堆叠值的图表从而直接访问堆叠区间的起点与终点为自定义堆叠样式、堆叠图元复用与复合图如马赛克图打下基础。什么是 Stack Transform堆叠图stacked chart是可视化中非常常见的形态——例如堆叠柱状图、堆叠面积图。在 Altair 中当你直接使用mark_bar()、mark_area()等标记并配合color等编码时Vega-Lite 会自动对数据进行分组group和堆叠stack。下面是一个典型的隐式堆叠柱状图使用altair.datasets中内置的barley数据集按year分列、按variety分行并用site着色import altair as alt from altair.datasets import data source data.barley() alt.Chart(source).mark_bar().encode( columnyear:O, xyield:Q, yvariety:N, colorsite:N ).properties(width220)这里的数据在内部已经被隐式地分组并堆叠。但问题来了如果你需要直接访问这些堆叠后的值例如某个品种在某年、某地块的累计区间该怎么办此时就需要 Stack Transform。用 transform_stack 手动构造同一张图我们可以用 Stack Transform 手动构造完全相同的堆叠柱状图并把堆叠区间的起止值显式地计算出来import altair as alt from altair.datasets import data source data.barley() alt.Chart(source).transform_stack( stackyield, as_[yield_1, yield_2], groupby[year, variety], sort[alt.SortField(site, descending)] ).mark_bar().encode( columnyear:O, xalt.X(yield_1:Q).title(yield), x2yield_2:Q, yvariety:N, colorsite:N, tooltip[site, yield, variety] ).properties(width220)对比两段代码可以清楚地看到差异隐式版本中xyield:Q由编码系统自动完成堆叠我们看不到任何中间值显式版本中transform_stack把yield字段按groupby[year, variety]分组后计算堆叠并将每根柱子的起点写入yield_1、终点写入yield_2随后在编码层用xyield_1:Q与x2yield_2:Q把柱子显式地绘制在这两个计算出的值之间——这正是文档中强调的bars are now explicitly drawn between values computed and specified within the x and x2 encodings柱体现在显式绘制在x与x2编码所指定、计算出的值之间。sort[alt.SortField(site, descending)]控制堆叠层leaves在栈中的排列顺序保证与隐式堆叠版本的分层次序一致。Transform OptionsStackTransform 的完整配置项transform_stack方法底层构建的是StackTransform类定义于 altair/vegalite/v6/schema/core.py#L26729-L26765其完整选项如下参数类型必填说明stackstr/FieldName是要被堆叠的字段。as_str/FieldName/Sequence[str]是输出字段名。可以是单个字符串也可以是含两个元素的字符串数组分别表示堆叠起点stack start与堆叠终点stack end的字段名。若只提供一个字符串例如val终点字段会自动命名为val_end。groupbySequence[str]/FieldName是分组字段决定堆叠在哪些分组内独立进行。offsetLiteral[zero, center, normalize]否堆叠模式默认zero。sortSequence[SortField]否决定堆叠层在栈中排列顺序的字段。其中offset的三种模式见 schema 定义 altair/vegalite/v6/schema/vega-lite-schema.json#L28009-L28016 与 core.py#L26739-L26745zero默认堆叠从0开始累积即最常见的绝对堆叠效果center将堆叠整体居中以总和为中心向两侧展开常用于河流图streamgraph等居中对称的堆叠面积图normalize将每个堆叠点计算为百分比输出值范围在[0, 1]之间即百分比堆叠100% stacked效果。注意在transform_stack()方法签名中由于as是 Python 关键字该参数被命名为as_见 altair/vegalite/v6/api.py#L3579-L3619方法内部会通过**{as: as_}将其转换为 Vega-Lite schema 中的as字段。底层实现方法如何落到 schema 上transform_stack是顶层Chart对象的变换方法之一。从源码看altair/vegalite/v6/api.py#L3615-L3619它的实现非常简洁return self._add_transform( core.StackTransform( stackstack, groupbygroupby, offsetoffset, sortsort, **{as: as_} ) )关键点在于_add_transform追加机制每次调用都会在 chart 的transform列表末尾追加一个新的StackTransform对象因此transform_stack可以与其他变换transform_aggregate、transform_window、transform_calculate等自由链式组合schema 直通StackTransform的_schema {$ref: #/definitions/StackTransform}直接引用 Vega-Lite 的 schema 定义最终会被序列化为 chart spec 中的transform数组项排序与偏移sort字段的每一项是SortField包含field与order用于控制堆叠叶子的顺序offset的类型是StackOffset_T即上面提到的三值枚举。测试用例 tests/vegalite/v6/test_api.py#L1234-L1243 验证了这一映射关系chart alt.Chart().transform_stack(stacked, x, groupby[y]) assert chart.transform [ alt.StackTransform( groupby[y], stackx, offsetUndefined, sortUndefined, **{as: stacked}, ) ]即调用transform_stack(stacked, x, groupby[y])后chart 的transform列表精确等于一个StackTransform(groupby[y], stackx, offsetUndefined, sortUndefined, asstacked)未指定的offset与sort保持Undefined由 Vega-Lite 引擎使用默认值offset默认zero。实战进阶normalize 模式与多变换链式组合Stack Transform 常常不是孤立使用的。仓库内置示例 tests/examples_arguments_syntax/mosaic_with_labels.py马赛克图mosaic chart就展示了它的两个高阶用法base ( alt.Chart(source) .transform_aggregate(count_count(), groupby[Origin, Cylinders]) .transform_stack( stackcount_, as_[stack_count_Origin1, stack_count_Origin2], offsetnormalize, sort[alt.SortField(Origin, ascending)], groupby[], ) ... .transform_stack( stackcount_, groupby[Origin], as_[y, y2], offsetnormalize, sort[alt.SortField(Cylinders, ascending)], ) )从这段代码可以提炼出以下实战要点offsetnormalize配合as_[stack_count_Origin1, stack_count_Origin2]输出[0, 1]区间的百分比堆叠值用于计算每个格子在整图中的比例位置groupby[]空分组表示在全局范围内堆叠适用于需要整体归一化的场景两次transform_stack链式调用第一次全局堆叠、第二次按Origin分组堆叠再与transform_window、transform_calculate组合最终用nx/nx2、ny/ny2等计算字段显式绘制矩形。这说明 Stack Transform 与聚合、窗口、计算变换组合后可以构造出远超普通堆叠图的复杂图表。常见问题与使用建议什么时候该用 Stack Transform当数据源不是 DataFrame而是 URL 指向的 JSON/CSV 时无法用 pandas 预处理此时图内变换包括transform_stack是唯一选择当复合图中不同视图需要对同一数据做不同变换时也应在 spec 内部完成堆叠。Altair 的官方建议见 doc/user_guide/transform/index.rst是能用 pandas 处理就用 pandas更灵活、更直观图内变换用于数据源非 DataFrame 或复合图场景。as_只传一个字符串会怎样根据 schema 文档vega-lite-schema.json#L28000若提供单个字符串如val终点字段自动命名为val_end即实际输出val与val_end两个字段。绘制区间显式堆叠后通常用x/x2或y/y2编码对来绘制标记区间正如本文第一个显式示例中用yield_1与yield_2分别绑定x与x2。小结Stack Transform 是 Altair 数据变换体系中把隐式行为显式化的典型代表它把编码层自动完成的堆叠计算下沉到transform阶段输出可直接引用的起止字段并支持zero、center、normalize三种偏移模式和SortField排序控制。通过transform_stack与transform_aggregate、transform_window、transform_calculate的链式组合你可以在 spec 内部完成复杂的堆叠计算进而构造马赛克图、百分比堆叠图等高级可视化。【免费下载链接】altairDeclarative visualization library for Python项目地址: https://gitcode.com/gh_mirrors/al/altair创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
FerretDB Cloud 使用指南:创建、部署与管理托管的 MongoDB 兼容数据库实例 后端数据库文档数据库 【免费下载链接】FerretDB A truly Open Source MongoDB alternative 项目地址: https://gitcode.com/gh_mirrors/fe/FerretDB 点击查看 免费下载 FerretDB Cloud 是 FerretDB 官方提供的托管数据库服务,让你无需自行维护基础设施… · 2026/9/24 16:39:17
Cirq 量子计算实战指南:电路构建、模拟与硬件执行全解析(基于 agentic-awesome-skills 技能文档) AI 技能AI 插件 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,445 agentic skills. Includes CLI, local MCP, catalog, … · 2026/9/24 16:38:51
Yii 2 配置系统全解析:从配置数组到应用、组件与环境的深度实践 后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 本文以 Yii 2 框架的配置体系为主线,系统讲解配置数组的格式规范、Yii::createObjec… · 2026/9/24 16:38:51
FileZilla 快捷键速查手册:30 个核心键盘操作完整解析 FileZilla 快捷键速查手册:30 个核心键盘操作完整解析 【免费下载链接】reference ⭕ Share quick reference cheat sheet for developers. 项目地址: https://gitcode.com/gh_mirrors/re/reference
FileZilla 是开发者与系统管理员最常用的开源 FTP/SFTP 客… · 2026/9/24 17:18:13
Modin pandas on Dask 使用指南:引擎配置、集群运行与 DataFrame 互转 数据分析数据工程大数据 【免费下载链接】modin Modin: Scale your Pandas workflows by changing a single line of code 项目地址: https://gitcode.com/gh_mirrors/mo/modin 点击查看 免费下载 本篇技术指南以仓库文档 docs/development/using_pandas_on_dask.r… · 2026/9/24 17:18:13
visual-explainer 完全指南:让 Agent 输出自包含 HTML 图表、评审报告与幻灯片 【免费下载链接】visual-explainer Agent skill that generates rich HTML pages or slide decks for diagrams, diff reviews, plan audits, data tables, and project recaps 项目地址: https://gitcode.com/gh_mirrors/vi/visual-explainer 点击查看 免费下载 v… · 2026/9/24 17:18:07
Flet PubSubClient 完全指南:Python 跨会话实时消息发布与订阅 前端跨平台桌面应用移动开发 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet 点击查看 免费下载 在 Flet 中,每个用户打开应… · 2026/9/24 17:18:07
Orleans ADO.NET 提供程序配置指南:为集群、持久化、提醒与流式传输接入关系型数据库 后端微服务 【免费下载链接】orleans Cloud Native application framework for .NET 项目地址: https://gitcode.com/gh_mirrors/or/orleans 点击查看 免费下载 本文是 Orleans 官方配置文档(configuring-ado-dot-net-providers.md)的深度实… · 2026/9/24 17:18:07
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44