第4章 Matplotlib 高级主题


文档摘要

第 4 章 · Matplotlib 高级主题 章节摘要:前三章我们一直在用 Matplotlib 的成品接口画图,plot、scatter、bar 一条龙下来,图是画出来了,但每当你想要再往里抠一点——让某行文字永远贴在子图右上角、让一个多边形精确对齐到某个数据点、或者搞懂为什么改了透明度图没变化——就会撞上一堵看不见的墙。这堵墙就是 Matplotlib 的对象模型。本章拆掉这堵墙,先讲三件底层的事:Artist 对象模型(所有可见元素的统一基类与层级)、坐标变换(数据坐标怎么一步步变成屏幕像素)、Path 和 Patch(底层图形到底由什么拼出来)。

第 4 章 · Matplotlib 高级主题

章节摘要:前三章我们一直在用 Matplotlib 的成品接口画图,plot、scatter、bar 一条龙下来,图是画出来了,但每当你想要再往里抠一点——让某行文字永远贴在子图右上角、让一个多边形精确对齐到某个数据点、或者搞懂为什么改了透明度图没变化——就会撞上一堵看不见的墙。这堵墙就是 Matplotlib 的对象模型。本章拆掉这堵墙,先讲三件底层的事:Artist 对象模型(所有可见元素的统一基类与层级)、坐标变换(数据坐标怎么一步步变成屏幕像素)、Path 和 Patch(底层图形到底由什么拼出来)。在此基础上,再补三件工程上的事:文本渲染与字体(中文显示、字体选择怎么处理)、扩展与生态(Seaborn、Cartopy 这些库怎么建立在 Matplotlib 之上)、性能优化(大规模数据怎么画才不卡)。读完这一章,你不再只是会画图,而是知道图是怎么被画出来的、怎么画得更好更快。

本节目标

阅读完本章,你应当能够:

  1. 说清"一切皆为 Artist"这句话的含义,区分容器型与图元型 Artist。
  2. 通过 ax.lines、ax.get_children 等入口拿到已有对象,并安全地改属性。
  3. 理清数据坐标、轴坐标、图形坐标、显示坐标四套坐标系的区别与转换路径。
  4. 用顶点和代码构造一个自定义 Path,再包成 Patch 画出来。
  5. 处理中文显示乱码,知道字体选择和 mathtext 的适用边界。
  6. 说清 Seaborn 等高级库与 Matplotlib 的关系,以及 Cartopy 等扩展解决了什么问题。
  7. 判断大规模数据可视化该用降采样、位图还是简化路径,避免画图卡死。

核心概念速览

画图的一瞬间,Matplotlib 在背后做了三件事:把对象挂到树上、把坐标换算成像素、把路径填上颜色。看懂这三件事,你就看懂了 Matplotlib。而文本、生态、性能,则是把这套底层能力用对、用好、用快。

本章六节分成两组:4.1 到 4.3 是底层三件事,回答"一张图是怎么被画出来的";4.4 到 4.6 是工程三件事,回答"怎么把图里的文字处理好、怎么借力生态、怎么画得快"。前者是后者的地基,后者是前者的落地。

切面 回答的问题 典型场景
Artist 对象模型 画布上有哪些可见元素、谁包含谁 改属性、隐藏元素、自定义渲染
坐标变换 一个数据点落在像素的哪个位置 注解定位、叠加图层、自定义轴
Path 与 Patch 一个形状由哪些顶点和指令拼成 自绘图形、自定义标记、填充区域
文本渲染与字体 文字怎么显示、中文字体怎么配 中文标签、数学公式、特殊字符
扩展与生态 哪些库建立在 Matplotlib 之上 统计图、地图、金融图
性能优化 大规模数据怎么画才不卡 百万点散点、长时序线图

把底层三件事想成一台打印机的内部:Artist 是打印任务里列出的每个零件,坐标变换是决定每个零件印在纸上的哪个位置,Path 和 Patch 是每个零件实际印出来的墨迹。而工程三件事,则是给这台打印机配好纸和墨(文本字体)、接入更多打印模板(扩展生态)、并让它别在大任务前卡壳(性能优化)。

子章节导航

4.1 Artist 对象详解

从"一切皆为 Artist"这句话出发,先带你看清 Figure、Axes、Axis、Line2D、Text 这些对象的父子关系,再动手拿到对象改属性,最后简谈自定义 Artist 的门槛。

4.2 Transformations 坐标变换

数据坐标怎么一步步变成屏幕像素,四套坐标系各管什么,Affine2D 的平移、缩放、旋转怎么用,组合变换的顺序又有什么讲究。

4.3 Path 和 Patch 对象

图形的最底层是什么:顶点加代码拼出 Path 骨架,再包一层填充和描边变成 Patch。掌握它,你就能画出任何内置函数画不出的形状。

4.4 文本渲染与字体

文字是图里最容易被忽视、也最容易翻车的一块。这一节讲清中文字体怎么配、mathtext 能做什么不能做什么,以及特殊字符怎么处理。

4.5 Matplotlib 的扩展与生态

Seaborn、Cartopy、mplfinance 这些库都站在 Matplotlib 的肩膀上。这一节讲清它们各自补了什么能力,以及什么时候该直接用 Matplotlib、什么时候该借力它们。

4.6 性能优化与大规模数据可视化

几百万个点的散点图怎么不卡、超长时序线怎么画得动。这一节讲降采样、位图渲染、路径简化这些策略,以及它们各自的代价。

子章节之间的逻辑关系

一句话概括:4.1 认识对象,4.2 定位对象,4.3 捏造对象——这是看懂一张图的三件底层事;4.4 管文字、4.5 借生态、4.6 提速度——这是把图画对、画好、画快的三件工程事。

4.1 Artist 对象模型(画布上有什么) │ 对象与层级 ▼ 4.2 坐标变换(对象放在哪) │ 定位与换算 ▼ 4.3 Path 与 Patch(对象长什么样) │ 底层三件事 → 地基 ▼ 4.4 文本渲染与字体(文字怎么显示) 4.5 扩展与生态(怎么借力) 4.6 性能优化(怎么画快)

4.1 是地基:你得先知道一个 Figure 里装着 Axes、Axes 里装着 Line2D 和 Text,后面几节才有操作的对象。4.2 补上"位置"这一维,4.3 落到最底层。这三节由表及里,从"改别人画好的"一路走到"自己造别人画不出的"。4.4 到 4.6 则在这套底层之上解决真实工程问题:文字是每个图都要面对的细节,生态是站在巨人肩膀上省力,性能是大数据场景下绕不开的约束。

前置知识与后续延伸

  • 前置:建议先熟悉第 1 章的对象式绘图接口(fig 和 ax 的来历),以及第 2 章、第 3 章里常见的 plot、scatter、bar 用法。本章大量代码都直接操作 ax 对象,不熟对象式接口会跟不上。
  • 延伸练习:读完本章后,试着只用一个 ax 对象,画一根线、加一行中文注解、再补一个自定义五角星,全程不调用任何 plt 开头的函数。能做到,说明你对对象模型、坐标变换、Path 和文本渲染的配合已经入门了。
  • 读法建议:六节分两条线读。4.1 到 4.3 是理解型重点,建议按顺序读并动手敲;4.4 到 4.6 是工具型,可以按需跳读——中文乱码了看 4.4,想画地图看 4.5,数据大了卡顿看 4.6。

💡 读本章的心法:抓住"图层"这个类比。Figure 是一块画布,Axes 是画布上的一块绘图区,Line2D、Text、Patch 是贴在绘图区上的一层层透明薄膜。改属性是调整某一层薄膜,坐标变换是决定这层薄膜贴在哪个位置,Path 和 Patch 是这层薄膜上到底印了什么图案。图层想通了,全章就通了。

⚠️ 本章最大的坑:把"能画出来"当成"懂了"。这一章的代码都很短,跑通不等于理解。尤其是坐标变换的组合顺序和 Path 的顶点代码配对,不亲手改几个参数、故意制造一次错位,你很难真正记住它们的脾气。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U