Plotnine:Python 的图形语法绘图库

查看原文 HN 讨论

文章摘要

Plotnine 是一个基于”图形语法”(grammar of graphics)框架构建的 Python 数据可视化库。按照官方文档的说法,它提供了”一套描述和构建图形的连贯系统”,语法上仿照了 R 语言中久负盛名的可视化库 ggplot2。

Plotnine 实现了与 ggplot2 相同的声明式绘图哲学:用户通过组合数据、美学映射(aesthetic mappings)和几何图层(geometric layers)来构建可视化,而不是使用命令式的逐步绘图指令。这种方式让图表的构建过程更接近”描述你想要什么”,而非”一步步告诉程序怎么画”。

该库的关键特性包括:分层架构——可视化通过堆叠组件来构建,每一层都继承前面图层的数据和映射,但也可以各自独立覆盖;自动默认值——系统会根据数据特征智能地应用图例、标签、配色方案和坐标轴刻度,大幅减少样板代码;分面(Faceting)——用户可以”在多个面板上重复任何数据可视化,而无需写 for 循环”,从而实现并排对比;高度可定制——每一个视觉元素(颜色、大小、主题、坐标轴刻度)都可以通过 theme 函数和 scale 函数单独调整或替换。

上手门槛极低:一个基础散点图只需要三行代码——导入库、加载数据、调用带美学映射的 ggplot() 并加上 geom_point()。文档还以著名的 Anscombe 四重奏(Anscombe’s Quartet)为例,演示了如何从一个探索性的图表出发,逐步加上趋势线、自定义颜色、更合理的坐标轴刻度和专业主题,最终打磨成可直接用于发表的精美图表。

HN 评论精华

has2k1(Plotnine 作者) 宣布了 v0.16.0 预发布版本带来的新能力,可通过 pip install --pre plotnine 安装,并在 GitHub issue #1031 中分享了细节。

评论区围绕”小提琴图”(violin plot)展开了一场有趣的辩论。seanhunter 批评小提琴图是无效的可视化,认为它在试图同时展示分布和四分位数时”两件事都做得不好”,并指出向观众展示这类图表时容易引起困惑。stared 对此进行了反驳,建议使用条带图(strip plot)和蜂群图(swarm plot)等替代方案,它们直接展示原始数据,无需依赖核密度估计(KDE)的假设。suuuuuuuu 则提供了详细的技术性反驳,剖析了 KDE 方法、密度归一化的问题,以及小提琴图不同朝向之间相对琐碎的差异。

icarusz(来自 Posit) 指出,图形语法类的库(如 Altair、Plotnine)在很多场景下优于 matplotlib,并特别提到它们更适合 AI 智能体进行代码生成——相比之下 matplotlib 的优势主要在于人类开发者积累的”肌肉记忆”。

epistasis 表达了对 R 的 ggplot2 相较于 Python 替代品的偏好,理由是代码更优雅,实现等价可视化所需的行数也少得多。closed(文档贡献者) 则在评论区主动征集关于 Plotnine 文档和用户体验痛点的反馈。