自学Python

Chapter 7

第7章Python数据可视化:Matplotlib模块

章节主张

第7章Python数据可视化:Matplotlib模块这一章真正要建立的,不是孤立知识点,而是围绕“可视化不是出图,而是组织观察、函数与模块是从会写到会组织的分水岭、环境与工具链先于语法细节”形成一套能反复练习、能迁移到真实任务里的 Python 学习路径。

中文释读

读 第7章Python数据可视化:Matplotlib模块 时,不要只把它当作语法或模块说明书。更有价值的读法,是问自己:这一章解决了我在编程、科学计算或数据分析流程中的哪个瓶颈?

这本书的强项在于把工具、基础语法、科学计算库和案例工作流连成一条线。章节页因此会把原书内容翻译成“知识点 -> 操作动作 -> 易错边界 -> 迁移练习”的学习结构。

本章知识路线

关键论据

  • Matplotlib模块是Python中一个常用的第三方数据可视化模块,支持很多不同类型的数据可视化操作。
  • Matplotlib模块有丰富的代码示例,支持精准的图像控制和高质量的图像输出,还可以使用Tex语法显示公式。
  • Matplotlib模块官方文档地址为 Matplotlib模块可以在脚本模式、Python或IPython解释器以及Jupyter Notebook中使用。
  • Anaconda已经预先安装好了Matplotlib模块。
  • 也可以使用pip命令更新: 本书使用的Matplotlib模块版本如下: 在Matplotlib模块中,Pyplot是一个核心的绘图子模块,通过该子模块,可以完成很多基本的可视化操作。

行动清单

  • 先用最小代码样例跑通本章核心知识点。
  • 把本章知识点接到一个真实小任务上,而不只停留在示例。
  • 记录本章最容易报错的边界条件和调试方式。
  • 复盘:这一章内容如何进入自己的长期 Python 学习系统。

本章图版学习路径

图版按知识点分组,适合拿来做复现、迁移和复盘练习,不只是“看一眼效果”。

源章节深读

7.1 Matplotlib模块简介

这节解决什么问题:这节要解决的不是背下“7.1 Matplotlib模块简介”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“7.1 Matplotlib模块简介”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 7.1 Matplotlib模块简介 背后的对象模型、输入输出和适用边界。

Matplotlib模块是Python中一个常用的第三方数据可视化模块,支持很多不同类型的数据可视化操作。Matplotlib模块有丰富的代码示例,支持精准的图像控制和高质量的图像输出,还可以使用Tex语法显示公式。Matplotlib模块官方文档地址为 Matplotlib模块可以在脚本模式、Python或IPython解释器以及Jupyter Notebook中使用。Anaconda已经预先安装好了Matplotlib模块。也可以使用pip命令更新: 本书使用的Matplotlib模块版本如下: 在Matplotlib模块中,Pyplot是一个核心的绘图子模块,通过该子模块,可以完成很多基本的可视化操作。在实际操作中,该子模块通常这样导入: 为了方便,本书统一采用plt作为Pyplot子模块的缩写。

7.2 基于函数的可视化操作

这节解决什么问题:这节要解决的不是背下“7.2 基于函数的可视化操作”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“7.2 基于函数的可视化操作”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 7.2 基于函数的可视化操作 背后的对象模型、输入输出和适用边界。

子模块Pyplot提供了一些绘图函数来完成基本的可视化绘图操作。 最常用的绘图函数为plt.plot()函数。例如,可以用plt.plot()函数绘制一条直线,并使用plt.ylabel()函数给图像加上一个y轴的标题,得到如图7-1所示的图形: 图7-1 plt.plot()函数的示例 通常,Matplotlib模块不会立即显示绘制的图形,以便后续向图形中添加更多的信息。只有在调用plt.show()函数后,绘制的图形才会显示。默认情况下,Python绘制的图形会以弹窗的形式显示,并提供了一些按钮对生成的图形进行一些简单的操作。例如,图7-1对应图形的完整弹窗如图7-2所示。 图7-2 Matplotlib模块的弹出窗口 如果使用Jupyter Notebook,plt.show()函数则可以省略,Python也不会弹出绘图窗口,而是在Jupyter Notebook的输出中内嵌图片,如图7-3所示。 图7-3 Matplotlib模块在Jupyter Notebook中的示例 1.函数的基本使用 plt.plot()函数可以绘制基本的点线图,它的使用方式主要有: 通常,参数x、y是两个等长的一维数组或列表,分别表示绘制点的横坐标与纵坐标,参数format_str用来控制绘图的格式。默认情况下,只给定x轴坐标和y轴坐标时,plt.plot()函数会用一条直线连接两个相邻的点。例如,当x的参数为[1,2,3,4]、y的参数为[1,4,9,16]时,plt.plot()函数会在坐标点(1,1)、(2,4)、(3,9)和(4,16)之间绘制三条直线,得到如图7-4所示的图形: 图7-4 给定x和y坐标的plt.plot()函数 不指定参数x时,x的值默认为range(len(y))。例如,调用plt

7.3 基于对象的可视化操作

这节解决什么问题:这节要解决的不是背下“7.3 基于对象的可视化操作”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“7.3 基于对象的可视化操作”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 7.3 基于对象的可视化操作 背后的对象模型、输入输出和适用边界。

Pyplot子模块主要通过函数进行可视化的操作,实际上,Matplotlib中更灵活的方式是使用基于对象的方式进行可视化操作。在Matplotlib中,每张图实际上都是一个Figure对象,可以使用plt.figure()函数来产生。Figure对象可以通过.add_axes()方法向图中添加Axes对象。Axes对象可以进行绘图操作,调用它的.plot()方法相当于调用plt.plot()函数。一个使用Axes对象绘图的实例如图7-10所示: 对于子图来说,每一个子图对应图像上的一个Axes对象。可以使用plt.subplots()函数来同时得到Figure对象和子图对应的Axes对象数组,其用法为: 图7-10 基于Axes对象的绘图实例 其中,numrows是子图的行数,numcols是子图的列数。一般来说,如果numrows和numcols都不为1,axes是二维NumPy数组;如果两者只有一个为1,axes是一个一维数组;如果两者都为1,axes是一个单独的Axes对象。利用plt.subplots()函数和基于对象的可视化模式,重新生成上下子图的例子,可以得到如图7-11所示的图形: 图7-11 基于对象的子图实例

7.4 图像中的文本处理

这节解决什么问题:这节要解决的不是背下“7.4 图像中的文本处理”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“7.4 图像中的文本处理”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 7.4 图像中的文本处理 背后的对象模型、输入输出和适用边界。

在数据可视化时,通常需要加上一些描述文字对生成的图形进行描述和解释。Matplotlib模块提供了一些基于函数和基于对象的文本处理方法。常用的函数与方法见表7-3。 表7-3 处理文本的函数与方法 本书不对这些函数的用法进行具体介绍,感兴趣的读者可以去官网阅读相关文档。科学计算需要使用各种数学公式与符号,Matplotlib支持使用LaTeX的语法书写并显示数学公式。考虑如图7-12所示的图形: 图7-12 不带数学公式的标题 可以用LaTeX的语法将标题替换为数学公式,得到如图7-13所示的图形: 图7-13 带数学公式的标题 可以看到,将两个“$”之间的部分解释成了数学公式。由于LaTeX的语法需要使用符号“\”,因此为了避免转义的问题,这里都是用不转义的r字符串实现LaTeX语法。 本节以三角函数为例,说明如何通过调用各种绘图操作对三角函数进行可视化。最简单的绘图方式如图7-14所示: 图7-14 三角函数 对三角函数来说,x轴刻度不太适合用整数表示,为此,可以通过plt.xticks()和plt.yticks()函数设置刻度,将刻度转换为与圆周率相关的值,得到如图7-15所示的图形: 图7-15 修改显示刻度 为了让刻度的位置显示的是含有圆周率的标识,可以在plt.xticks()中传入第二组参数,并使用LaTeX的语法来显示圆周率,得到如图7-16所示的图形: 图7-16 修改刻度显示方式 绘制三角函数时,最好让x轴与y轴在原点相交。这个功能,可以利用Axes对象完成。当前图像的Axes对象可以通过plt.gca()函数来得到: 四个坐标轴(上下左右)可以通过ax.spines属性索引得到。考虑到刻度在左边与下方的两个坐标轴上,因此,可以利用索引先将上面的轴和右边的轴设为透明: 再将左

7.6 本章学习笔记

这节解决什么问题:这节要解决的不是背下“7.6 本章学习笔记”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“7.6 本章学习笔记”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 7.6 本章学习笔记 背后的对象模型、输入输出和适用边界。

本章对Matplotlib模块进行了简单的介绍。Matplotlib模块支持使用基于函数和基于对象两种方式进行基础的可视化操作,也能借助LaTeX语法在图像上插入漂亮的数学公式。Matplotlib中还有很多很强大的绘图操作,要想熟练掌握各种不同的绘图方式,需要通过观看已有的绘图代码实例,不断实践和摸索。 学完本章,读者应该做到: ●了解基于函数和基于对象的两种可视化操作模式。 ●掌握一些基本绘图操作。 ●知道图和子图的生成。 ●可以向图中添加数学公式。 ●掌握如何使用Matplotlib的示例进行可视化尝试。 1.本章新术语 本章不涉及新术语。 2.本章新函数 本章涉及的新函数见表7-4。 表7-4 本章涉及的新函数 3.本章Python 2与Python 3的区别 本章不涉及Python 2与Python 3的区别。

辨析题:如果你只会照抄 第7章Python数据可视化:Matplotlib模块 里的例子,却无法换一个输入自己写出来,真正缺的是什么?

多数时候缺的不是记忆,而是对象模型、输入输出边界和操作顺序的理解。把知识点换到新输入上依然能运行,才算真的进入了自己的系统。