6.1 一张图带你入门matplotlib


Python在数据分析领域有一个很完备的生态系统,在数据处理方面有 Pandas,在数据可视化方面有 Matplotlib,在数据爬取方面有 Scrapy(或者不用框架),在数据挖掘方面有 Scikit-learn等等。

最近这几篇文章,就先来讲讲,比较酷炫的数据可视化,相信你学完之后一定会有满满的成就感。

Matplotlib 是 Python 的一个绘图库。它包含了大量的工具,你可以使用这些工具创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形。Python 科学计算社区经常使用它完成数据可视化的工作。它几乎可以画出你所能想到各种有逼格,文艺的,高雅的图形。

学习 matplotlib 最好的途径是 官网(http://matplotlib.org/),以下内容都是本人从官网上一点一点消化总结出来的,都是精华提炼,毫不含糊。希望你看完也能有所收获。

01. 使用工具

在上一篇文章中,小明首先讲了一个工具,以后文章里的所有操作都将在这里面实现,还没有阅读的小伙伴,记得先去学习下:Jupyter NoteBook。

为什么会推荐使用这个工具呢?

你在一些早期的文章中,可能会看到如下,两种语句,

  1. %matplotlib inline # IPython模式下

  2. %pylab inline # Jupyter Notebook模式下

将这两个命令放在你绘图代码前面,它可以在绘图时,将图片内嵌在交互窗口,而不是弹出一个图片窗口(体验感超差有木有)。在这两种模式下,是只要有plt出现,图片会立马show出来(所以可以不用显式的plt.show())。

但是,这也有一个缺陷:除非将代码一次执行,否则,无法叠加绘图,

看完上面,现在的你可能不知道它们有啥用。不过不要紧,现在你可以完全忽视上面这两个语句,因为现在使用 Jupyter NoteBook 已经不再需要指定这两种语句了。

02. 两种方式

在网上有些教程文章,画图使用的是 pylab,而有些使用的是 pyplot。这是常见的两种

那么 pyplot 和 pylab 有什么区别呢?

Matplotlib,大家都很清楚,是整个包的名字。

而 pyplot 和 pyplab 都是 matplotlib 中的一个模块; pyplot是一个提供了面向对象的底层状态机接口的绘图库

而 pylab 在官网上,有这样一段话: >pylab is a convenience module that bulk imports matplotlib.pyplot (for plotting) and numpy (for mathematics and working with arrays) in a single name space. Although many examples use pylab, it is no longer recommended.

它的内部其实已经导入了 pyplot 和 numpy 。其实我暂时并不知道它有什么弊端,但是最后一句,给我们提了一个醒,它上面说 pylab 已经不再推荐使用了。所以你如果是一个初学者,在网上看到 pylab 的教程文章,那么你可以跳过不学。所以下面的教程,我都将使用 pyplot。

03. 图表的基本结构

前两天的官网上闲逛的时候,发现了一张图,可以说把一个图表该有的元素都很好的展示出来了。从这张图入手,一点一点地实现这里面的每个元素,我们也算是入门了matplotlib了。 image0

这里面的大部分元素,我相信会点英文的你都能很轻松的理解。

唯独有这两个概念,我要在这里强调一下,就是 aixs 和 axes 的区别:

axis:可以认为是两个轴,他可以设置轴的大小限制,set_xlim() ,set_ylim() ,还有设置刻度 ticks(由Locator对象定义),还有ticklabel(由Formatter对象定义)等

axes:可以认为是axis的复数,是多个axis组成的。在二维图里,就是两个axis组成,在三D图里,就是三个axis组成。所以你可以粗浅的理解为一个图表就是一个axes,他们可以设置 标题:set_title(),标签:set_xlabel(),set_ylabel()等

04. 画个简单的图

学习完了如上的一些基本元素,我们来看看如何一点一点实现它。

以下的代码都在 NoteBook单元格里运行,后面不再赘述。

import numpy as np
import matplotlib.pyplot as plt

# x轴对应的值
x = np.linspace(0, 5, 100)

# 画图,并设置线形和颜色。 b代表 blue,- 代表线型
plt.plot(x, x**2, 'b-')

# 设置x轴和y轴的名字
plt.ylabel('y')
plt.xlabel('x')

# 设置标题
plt.title("First Figure")

# 设置栅格
plt.grid(True)

# 设置坐标范围
plt.xlim(0, 3)
plt.ylim(0, 7)

# 在指定坐标处,标注文字
plt.text(1, 4, r'y=x^2', fontsize=20)

# 添加图例,注意是个tuple,加逗号
plt.legend(('MING',),loc='upper right')

# 设置刻度标签
lables=[x for x in range(10)]
plt.xticks(x,lables)

# 打开次刻度
plt.minorticks_on()

# 显示图片,在NoteBook中可以不写
plt.show()

以上的注释,可以说是很直白啦。一张图表该有的东西都有了,不花哨,但实用。 看看我们的代码输出的图表是啥样的。

image1


关注公众号,获取最新干货!