数据可视化【免费下载链接】altairDeclarative visualization library for Python项目地址https://gitcode.com/gh_mirrors/al/altair点击查看免费下载本文围绕 Altair 中的 Lookup 变换Chart.transform_lookup/LookupTransform展开系统讲解如何在不依赖 pandas 预处理的情况下于图表规范内部把主数据源与另一数据源按字段进行单边连接并给出人群-分组关联、美国县级失业率地理可视化等可直接运行的实战示例同时从 api.py 与 core.py 源码层面剖析其参数语义、底层结构LookupData/LookupSelection与类型兼容性陷阱。Lookup 变换是什么图表内的单边连接Lookup 变换Lookup Transform的作用是用一个数据源中的值去扩充enrich主数据源它本质上等价于数据库中的一次单侧连接one-sided join。与需要先把数据下载到本地、用 pandas 预先合并再交给图表的做法不同Lookup 变换直接把关联逻辑写进图表的 Vega-Lite 规范里由渲染引擎在浏览器端完成合并。这在数据源是 URL 或实时流式数据、无法或不适合在 Python 侧做预处理时尤其有价值。在 Altair 中Lookup 变换通过顶层图表的Chart.transform_lookup方法添加。例如当手头有两份数据——一份是人员的姓名、身高、体重另一份是每个人所属的分组信息——虽然两份数据可以各自独立可视化但要绘制每个分组的平均年龄这类需要同时引用两份数据的特征图就必须先把它们合并起来。参考原始文档doc/user_guide/transform/lookup.rst两种合并思路pandas 预处理 vs 图表内 Lookup方式一使用 pandas.merge 在 Python 侧合并传统做法是先下载数据用 pandas 完成合并后再绘图。pandas 提供了非常丰富的合并、连接工具如merge、join、concat等。对于上面的人员 分组数据可以用左连接把两组数据合二为一import altair as alt import pandas as pd # 示例数据来自 altair.datasets from altair.datasets import data people data.lookup_people() groups data.lookup_groups() merged pd.merge(groups, people, howleft, left_onperson, right_onname) alt.Chart(merged).mark_bar().encode( xmean(age):Q, ygroup:O )这里指定的是左连接howleft对于groups中person列的每一个条目去people的name列中寻找对应值并把匹配到的行追加进数据。合并之后就能轻松画出每个分组的平均年龄柱状图。方式二使用 Lookup 变换在图表规范内合并对于通过 URL 提供或处于流式传输中的数据如果先下载到本地再用 pandas 做预处理并不理想这时就该用 Altair 的transform_lookup。下面这段代码完全在图表规范内部完成同样的合并无需任何 pandas 预处理import altair as alt from altair.datasets import data people data.lookup_people() groups data.lookup_groups() alt.Chart(groups).mark_bar().encode( xmean(age):Q, ygroup:O ).transform_lookup( lookupperson, from_alt.LookupData(datapeople, keyname, fields[age, height]) )其中lookupperson指定在主数据源这里是groups中用于匹配的字段名from_alt.LookupData(datapeople, keyname, fields[age, height])指定辅助数据源即一个LookupData结构其中data是要去查找的第二份数据key是辅助数据源中用于匹配的键字段fields是从辅助数据源中提取出来的字段列表。注意 Altair 中的from_之所以带下划线后缀是因为from是 Python 保留字API 层会把from_正确映射为 Vega-Lite 规范中的from属性见 api.py 中kwargs[from] from_的处理。transform_lookup 的完整参数语义根据 api.py 中Chart.transform_lookup的方法签名以及底层 LookupTransform schema 包装类该方法支持以下参数参数类型说明lookupstr主数据源中用于匹配的键字段Key in primary data source。必填。from_LookupData或LookupSelection辅助数据引用可以是另一个数据源LookupData也可以是某个选择参数LookupSelection。as_str或list[str]存放查询结果的输出字段名。对数据查找data lookup而言若已指定from_.fields则可省略将直接使用那些字段名若未指定from_.fields则as_必须是一个字符串。对选择查找selection lookup而言该参数可选省略时结果存放在以选择名称命名的属性下指定时则必须与from_.fields对应。API 层会将as_映射为规范中的as见 api.py。default任意值查找失败未匹配到时使用的默认值。默认值为null。**kwargs—透传给底层core.LookupTransform的额外参数。方法内部把参数组装后通过self._add_transform(core.LookupTransform(**kwargs))挂载到图表的transform数组中api.py因此一个图表中可以链式叠加多个 transform。此外若同时传入as_与as或from_与fromAPI 会抛出ValueError以提示参数重复api.py。底层结构LookupData 与 LookupSelectionLookupTransform的from属性可以是两种结构之一参见 vega-lite-schema.json 中的anyOf定义LookupData从辅助数据源查找在 core.py 中LookupData接受三个参数参数类型说明dataData及其子类UrlData、InlineData、NamedData、Generator等要去查找的辅助数据源。必填。keystr/FieldName辅助数据中用于匹配的键字段。必填JSON schema 中data与key均为required。fieldsSequence[str / FieldName]需要从辅助数据中提取的字段列表若不指定则查询整个对象。可选。值得注意的一点是LookupData在 Altair API 层有一个专门包装类api.py它重写了to_dict在序列化前会对data调用_prepare_dataapi.py——这意味着data参数可以直接传 pandas DataFrame 或其它被 data transformers 识别的对象Altair 会在导出规范时自动完成内联数据与命名数据集的整理。数据既可以像人群示例那样直接传 DataFrame也可以通过alt.UrlData(url)包装一个远程 URL例如 tests/vegalite/v6/test_api.py 中alt.LookupData(alt.UrlData(foo.csv), id, [rate])的写法。LookupSelection从选择参数查找在 core.py 中LookupSelection用于从图表中已有的**选择参数selection parameter**中查找值参数类型说明keystr/FieldName数据中用于匹配的键字段。必填。paramstr/ParameterName用于查找的选择参数名称。必填。fieldsSequence[str / FieldName]需要提取的字段不指定则查询整个对象。可选。例如tests/vegalite/v6/test_api.py 展示了alt.LookupSelection(keykey, paramsel)与transform_lookup(a, from_lookup_selection, as_a, defaultb)的组合用法其序列化结果与LookupTransform的数据查找形态完全一致。这一特性使得 Lookup 变换可以在交互式图表中把用户选择状态如点击、刷选映射为数据行用于驱动跨视图联动。关键注意事项键值与数据类型的兼容性Lookup 匹配基于字段值的精确相等比较因此必须确保主数据源中的lookup字段与辅助数据源中的key字段使用兼容的值与数据类型。一个典型的坑是零填充空间 IDzero-padded spatial ID字符串形式的06001永远不会匹配上数值形式的6001。如果你的 DataFrame 中空间 ID 是零填充字符串、而地理数据使用的是数值 ID请在创建图表之前把列转换成兼容类型例如在 pandas 中执行df[id] df[spatial_id].astype(int)这一规则同样适用于其它类型的编码差异字符串 vs 数值、大小写不一致、前后空格等在正式使用前值得对两个键列的数据类型做一次一致性检查。实战示例用 Lookup 变换绘制美国县级失业率地图Lookup 变换在地理可视化中尤为常用——把普通表格数据与描述地理边界的 TopoJSON 数据组合在一起正是它的典型场景。下面的示例展示全美各县级失业率的可视化import altair as alt from altair.datasets import data counties alt.topo_feature(data.us_10m.url, counties) unemp_data data.unemployment.url alt.Chart(counties).mark_geoshape().encode( colorrate:Q ).transform_lookup( lookupid, from_alt.LookupData(unemp_data, id, [rate]) ).properties( projection{type: albersUsa}, width500, height300 )工作原理拆解alt.topo_feature(data.us_10m.url, counties)加载美国州郡边界 TopoJSON作为主数据源其中每个县以id标识data.unemployment.url提供失业率表格数据URL 数据源作为辅助数据源transform_lookup(lookupid, from_alt.LookupData(unemp_data, id, [rate]))以id为键把失业率rate字段贴到对应的县边界几何对象上encode(colorrate:Q)用查到的rate数值驱动颜色映射projection{type: albersUsa}采用适用于美国的 Albers 投影。从源码结构看这个模式在仓库的示例与测试中反复出现例如 tests/examples_arguments_syntax/choropleth.py 与 tests/examples_methods_syntax/maps_faceted_species.py 均使用transform_lookup把表格数据关联到地理边界choropleth_repeat.py甚至通过variable_list一次关联多个变量验证了 Lookup 变换在多变量专题地图中的可扩展性。延伸更多组合用法与典型场景仅指定 key、不指定 fields当fields省略时辅助数据源中整条记录都会被查询并附加到主数据行上。例如 tests/examples_arguments_syntax/maps_faceted_species.py 中alt.LookupData(datacounties, keyid)不带fields的写法。多字段提取在fields中列出多个字段如人群示例的[age, height]查找后这些字段会作为独立列并入主数据可直接参与xmean(age):Q之类的聚合编码。默认值兜底通过default参数为未匹配上的记录提供兜底值默认null避免缺失值影响后续计算。与其它变换链式组合transform_lookup返回图表对象本身以支持链式调用可与transform_filter、transform_aggregate、transform_window等任意变换叠加使用。小结Lookup 变换把数据关联能力从 Python 侧迁移到了图表规范内部让基于 URL、流式数据的可视化无需本地预处理即可完成多数据源整合。掌握transform_lookup的lookup/from_/as_/default四个核心参数理解LookupData数据查找与LookupSelection选择查找两种底层结构并时刻留意键字段的类型兼容性你就能在人群统计、地理专题图、交互联动等场景中熟练运用这一能力。更完整的参数细节可继续查阅 api.py、core.py 以及 vega-lite-schema.json 中的对应定义。赞分享数据可视化【免费下载链接】altairDeclarative visualization library for Python项目地址https://gitcode.com/gh_mirrors/al/altair点击查看免费下载相关推荐Altair数据可视化图表自定义完全指南Altair数据可视化图表自定义完全指南 还在为Altair图表的美观度和专业性发愁想要打造符合品牌风格的个性化可视化效果本文将为您全面解析Altair图数据可视化Altair 数据可视化库图表保存全指南Altair 数据可视化库图表保存全指南 还在为如何保存和分享你的数据可视化作品而烦恼吗Altair 作为 Python 生态中最优雅的声明式可视化库提供数据可视化Polars 数据可视化完整指南从内置 Altair 绘图到六种主流可视化库实战Polars 数据可视化完整指南从内置 Altair 绘图到六种主流可视化库实战 Polars 本身是专注于数据查询与变换的高性能 DataFrame 引擎数据分析大数据上一篇Office RibbonX Editor重塑Office界面定制体验的智能革新下一篇告别网盘限速烦恼LinkSwift直链下载助手完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
EMQX LwM2M 网关安全修复:REGISTER/UPDATE 报告中敏感查询字段的过滤机制 后端物联网消息队列通信 【免费下载链接】emqx The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 点击查看 免费下载 本篇技术指南围绕 EMQX 开源仓库中的一个安全修复项展… · 2026/9/24 16:34:18
OSS-Fuzz 理想集成指南:如何把 fuzz target 无缝嵌入你的项目 网络安全开发工具CI/CD 【免费下载链接】oss-fuzz OSS-Fuzz - continuous fuzzing for open source software. 项目地址: https://gitcode.com/gh_mirrors/oss/oss-fuzz 点击查看 免费下载 OSS-Fuzz 面向的是拥有不同构建与测试系统的开源项目,无法要求… · 2026/9/24 16:34:18
django CMS 2.2 升级指南:依赖重构、权限增强与向后不兼容变更全解析 CMS后端 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms 点击查看 免费下载 django CMS 2.2 是一次以"工程化收敛"为核心的版本升级&a… · 2026/9/24 16:34:11
第24篇-MCP-Client架构-Host应用如何管理多个Server连接 【MCP 全栈教程】第 24 篇:MCP Client 架构——Host 应用如何管理多个 Server 连接 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。… · 2026/9/24 17:01:59
第21篇-MCP-Server测试-MCP-Inspector与自动化测试 【MCP 全栈教程】第 21 篇:MCP Server 测试——MCP Inspector 与自动化测试 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。 本篇你… · 2026/9/24 17:01:59
OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408
用 OneNote 攒了几个月笔记,某次… · 2026/9/24 17:01:59
使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS 示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/24 17:01:53
Visual Explainer Quick 模式深度指南:用紧凑 JSON Spec 一键渲染自包含 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 点击查看 免费下载 Q… · 2026/9/24 17:01:53
基于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