Python Matplotlib 绘图使用指南 (附代码)

大多数人不会花大量时间去学 matplotlib 库,仍然可以实现绘图需求,因为已经有人在 stackoverflow、github 等开源平台上提供了绝大多数画图问题的解决方案。我们通常会使用 google 来完成绘图需求。至少我是这样。

本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover。

翻译 | 李振   于志鹏    整理 |  凡江

Python Matplotlib 绘图使用指南 (附代码)

大多数人不会花大量时间去学 matplotlib 库,仍然可以实现绘图需求,因为已经有人在 stackoverflow、github 等开源平台上提供了绝大多数画图问题的解决方案。我们通常会使用 google 来完成绘图需求。至少我是这样。

那学 matplotlib 库有什么用?答案是:可以节约搜索时间。掌握 matplotlib 的速查表并了解其基本接口,根据个性需求从众多资源中编辑我们的绘图,从长期来看会节约很多的时间。

大部分内容取自以下 2 个链接,建议也去阅读一下。

https://realpython.com/python-matplotlib-guide/#why-can-matplotlib-be-confusing

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Matplotlib_Cheat_Sheet.pdf

Python Matplotlib 绘图使用指南 (附代码)

matplotlib 是一个基于 Python 的 2D 绘图库,其可以在跨平台的在各种硬拷贝格式和交互式环境中绘制出高图形。

  • 一个有趣的现象。为什么引用库总采用 import matplotlib.pyplot as plt 的方式呢?

    因为使用例如 pylab import * 或者 %pylab 是一个非常不好的方式,matplotlib 官方不建议这样使用,具体原因如下:

由于历史原因,from pylab import * 仍然存在,但是强烈建议不要这样使用。这样做会遮蔽 Python 的内置函数进而占用命名空间,导致难以追踪的 bugs。想要实现零输入获得 IPython 集成,推荐使用 %matplotlib 命令。来源https://matplotlib.org/users/shell.html#using-matplotlib-in-a-python-shell

使用 matplotlib 绘制不同类型的图像是很容易的,有很多文档和教程。最重要的是,了解最佳的绘图方式。如何使用 axes,subplots 等。这篇文章主要针对这些问题。

1.内联绘图和 % matplotlib 

%matplotlib 命令可以在当前的 Notebook 中启用绘图。这个命令提供一个可选参数,指定使用哪个 matplotlib 后端。绝大多数情况下,Notebook 中都是使用 inline 后台,它可以在 Notebook 中嵌入绘图。另一个选项是 qt 后台,它在侧窗口打中打开 Matplotlib 交互 UI 。

Matlibplot 提供了多种绘图 UI ,可进行如下分类 :

  • 弹出窗口和交互界面: %matplotlib qt 和 %matplot tk
  • 非交互式内联绘图: %matplotlib inline
  • 交互式内联绘图: %matplotlib notebook-->别用这个,它会让开关变得困难。

2.理解 matplotlib 对象结构

pyplot 是一个 matplotlib 面向对象的函数接口。

plt.gca()

它返回当前 plot() 关联的轴

Python Matplotlib 绘图使用指南 (附代码)

如果不使用 plt.close(),则会显示出空的图形。因为在开始时使用了 inline 命令。

Python Matplotlib 绘图使用指南 (附代码)

axis_id 仍然是相同的,但是当我们移动到另一个 Notebook 块时,plt.gca() 会发生变化。

Setter 和 Getter

Getter 和 Setter 方法用于捕获当前或任意 axies 以及对其进行修改。我们可能需要修改标题、颜色、图列、字体等。有两种方法:

1. 使用 fig.axes[i] 指定要抓取的 axes,使用 setter 的 getter 对 axies 对象进行调用。在上面的例子中,只有一个 axes,所以我们调用 axes[0]。

2. 我们可以直接使用 plt.bla() 调用当前 axis(其中,bla 可以是 title(),legend(),xlabel()等)。这是 matlibplot 面向对象的一种函数。这个函数让修改当前的 axes 变得容易。比 1 的方法更常用。

Python Matplotlib 绘图使用指南 (附代码)

当我们使用 axes[i] 时,我们可以调用任何之前的代码块中的任何 axes 对象,但是调用 plt.bla(),会在每个代码块中创建新的 axes 对象,并只调用当前对象。因此,上面例子中,只在 plt.title() 被调用时,才创建新 plt 对象。

重要观察:我们通常在当前 axis 对象上调用 plt.bla(),这种语法使得每个代码块中的 axis 对象都是新创建的。但是通过调用 fig.axes[0],我们也可以从任何代码块中处理之前的 axes 对象。

这是 stateless(object oriented) 方法,并可以自定义,当图像变得复杂时,这样做很方便。

所以,我建议是使用 fig,ax = plt.subplots(_) 先解压 axes 和 figure,并给它们分配给一个新的变量。然后,可以对这些变量使用 Getter 和 Setter 方法进行绘图中的更改。此外,这使得我们能够在多个 axes 上做工作,而不是只在一个当前 axes 上。pyplot 使用 1 次创建子图,然后使用 OO 方法。

结论:从现在开始,我使用 plt.subpots() 来完成不同的绘图。(如果有人认为这个观点是错误的,请纠正我)

3.matplotlib 图像剖析

Python Matplotlib 绘图使用指南 (附代码)

来自: https://matplotlib.org/faq/usage_faq.html

4.绘图的基本例子

如何作图的基本例子,涵盖面向对象绘图的各个方面。请仔细阅读。

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

总结上面的例子:

  • 我们创建 1 行和 2 列的图形。即,1 行和 2 列中的 2 个 axes 对象。
  • 我们分别自定义 ax1 和 ax2。可以看到,我们可以将 Y-ticks 移动到右边的第二图形中。

5.二维网格的绘制

subplot2grid

需要做什么?

观察下面的绘图格式。

Python Matplotlib 绘图使用指南 (附代码)

思路是把上面的图形考虑成为 2×4 网格。然后将多个网格分配给单个图以容纳所需的图形。

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

重点:

  • 我们可以使用 subplot2grid 定制我们的绘图布局。
  • 我们可以用 plt.figure() 创建无 axes 对象的图形,然后手动添加 axes 对象。
  • 我们可以使用 fig.suptitle() 来设置整个图形的总标题。

6.颜色,颜色条,RGB 数组和颜色图谱

我们已经介绍了 ax.plot(),ax.scatter(),ax.bar() 和 ax.hist() 等基本图形操作,另一个更常用的函数是 ax.imshow(),它用来显示彩色图或图像/RGB 数组。

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

7.线条样式和线条宽度

改变线条宽度、颜色或风格。

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

8.基本的数据分布

EDA 过程中的必要操作。

Python Matplotlib 绘图使用指南 (附代码)

9.二维数组的等高线图和颜色网格图

热像图(颜色网格图)和等高线图在很多情况下都有助于可视化 2D 数据。

Python Matplotlib 绘图使用指南 (附代码)

10.图像的调整、修改边缘坐标和标度

最后调整细节,让绘图变得更好看。

11.标度的限制和自动调整

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

需要注意的事情:

  • 填充(padding)自动设置 X 轴或 Y 轴网格标度
  • 我们可以使用 xlim,ylim 设置 x,y 的刻度限制

12.技巧

Python Matplotlib 绘图使用指南 (附代码)

Python Matplotlib 绘图使用指南 (附代码)

13.轴线

Python Matplotlib 绘图使用指南 (附代码)

14.结束

博客原址: https://www.kaggle.com/grroverpr/matplotlib-plotting-guide/notebook

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
张乐的头像张乐编辑
上一篇 2018-05-20 07:40
下一篇 2018-05-29 00:08

相关文章

关注我们
关注我们
分享本页
返回顶部