☰
Altair 5 分钟画会 3 张统计可视化图:箱线图与数据分布实用指南
2026/11/5 1:12:27 网站建设 项目流程

Altair 5 分钟画会 3 张统计可视化图:箱线图与数据分布实用指南

【免费下载链接】altairDeclarative visualization library for Python项目地址: https://gitcode.com/gh_mirrors/al/altair

老板甩来一份三个月的交付记录,问"这三家供应商谁更稳定",答案应该在图里,而不是你嘴里。本文用 Altair——一个声明式统计可视化库,带你过完比较组间分布、发现变量关联、看数据密度形状这三个高频场景。

五分钟后画出一张能交的图

先pip install altair,一条命令。手头没有数据也别慌:Altair 自带 70+ 示例数据集,altair/datasets/ 里的data.cars()直接返回 DataFrame,可以当 pandas 对象用。

Altair 的核心思路是三个动词:Chart(data)挂上数据,mark_point()、mark_rect()这类 mark 函数选图表形态,encode()把列映射到 x、y、color 通道。比如看汽车马力与油耗的关系:

import altair as alt from altair.datasets import data cars = data.cars() alt.Chart(cars).mark_point().encode( x='Horsepower:Q', y='Miles_per_Gallon:Q', color='Origin:N' )

encode里的:Q、:N是类型标注,分别表示定量与标称。Altair 会自动推断,但偶尔猜错导致坐标轴跑飞,工作图表建议显式写上。最终生成的 spec 是标准 Vega-Lite JSON,用chart.to_dict()就能查看,调试很方便。

三个高频场景,对应三张图 📊

比较组间分布:箱线图看出谁更稳定

回到开头的问题。当你需要一眼看出某组数据分布是否被少数极端值带偏时,箱线图是最省事的:它把分布压缩成箱体(中位数与四分位)、须线和离群点。

import altair as alt from altair.datasets import data alt.Chart(data.cars()).mark_boxplot().encode( x='Origin:N', y='Miles_per_Gallon:Q' )

画出来之后别只看箱体高低:中位数线的位置是水平,须线的长短是稳定性,谁明显矮一截还拖着几个须外点,谁就是"不稳定供应商"。须线范围可用extent参数调,默认 1.5 倍 IQR 一般够用。

用颜色深浅一眼锁定强相关变量

变量多了记不住谁跟谁相关,就把相关系数矩阵画成热力图:格子颜色越深,相关性越强,不用逐个读数字。iris 是四个数值列,开箱即跑:

import altair as alt from altair.datasets import data corr = data.iris().corr().stack().reset_index(name='value') alt.Chart(corr).mark_rect().encode( x='level_0:N', y='level_1:N', color='value:Q' )

看的地方:对角线格子恒为 1(自相关),偏离对角线、颜色突然跳出来的格子才是值得深究的变量对。如果整张矩阵都是浅淡的同色,说明变量间基本独立,建模可以放放心了。

看数据密度形状:不引额外库画小提琴图

直方图把数据压成离散柱子,形状信息会丢。想看到连续的数据分布轮廓、还要同时对比多个分组时,用小提琴图。Altair 没有内置 violin mark,官方做法是两步:先调用transform_density('Miles_per_Gallon', groupby=['Origin'])做分组核密度估计,再用mark_area()配合stack='center'把密度曲线对称铺在轴两侧,轮廓就出来了。代码比箱线图多几行,但形状会说故事。

画出来之后看轮廓:小提琴越宽,该处取值密度越高;出现双峰轮廓,说明这一组里混着两种不同类型的对象,分开处理比算均值更有意义。

让图表动起来:加两行代码的交互 ⚡

图进了汇报,老板的下一句通常是"把这块的点单独圈出来"。框选过滤(brush)是最常用的交互:用alt.selection_interval()建一个区间选择,.add_selection(brush)挂到图上,再把 encode 的 color 换成alt.condition(brush, 'Origin:N', alt.value('lightgray'))——框内点保留原色,框外淡成灰色。选择参数的机制实现在 altair/vegalite/v6/,想深挖时顺着 spec 读一遍就懂了。

上图是经典的联动模式:上面散点、下面按天气类型聚合的条形,任一侧拖出选区,另一侧立刻更新。从单图 brush 升级到双图联动,思路完全一样——两个图表引用同一个 selection。

少踩坑:数据、配色与导出 🎨

列类型占"图表不对"的九成。日期列被读成字符串会按字典序排列,x 轴顺序一片乱;先转成 datetime 再画图,多数"玄学错图"当场消失。

别逐图调色。默认配色过审足够用,正式产出直接alt.theme.enable('quartz')这类一行切主题,内置主题清单就在 altair/theme.py,一份报告的观感瞬间统一。

导出格式按用途选。要交互分享就.save('chart.html'),进报告论文就存矢量.save('chart.svg')。导出 PNG 报错时先确认 node 渲染器装没装,或者干脆换 SVG 省心。

接下来可以做什么

统计可视化练习里最常用的三个方向,按出活频率排:

复合图表:alt.vconcat()/alt.hconcat()把两张图上下、左右拼成总览加明细的看板;.add_layers()在条形图上叠一条趋势线,一句话的事。

联动选择:把上面的 brush 扩展到两张图,一个 selection 参数两边引用,联动效果十行代码以内。

大数据量:DataFrame 超过百万行时,先alt.data_transformers.enable('vegafusion')在本地预计算再交给浏览器,交互才不卡。

更系统的资料在用户指南 doc/user_guide/,从 encodings 到 interactions 都有。现在就可以打开 notebook,把开头那段散点图的cars换成你的交付表、y 换成交付时长——五分钟后,你就有答案可以给老板了。

【免费下载链接】altairDeclarative visualization library for Python项目地址: https://gitcode.com/gh_mirrors/al/altair

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询