代码改变世界

Matplotlib中的两种绘图API说明

2021-12-27 09:06  fulu-fly  阅读(134)  评论(0)    收藏  举报

Matplotlib中的两种绘图API说明
在Matplotlib库中提供了两种风格的API供开发者使用:一种是Pyplot编程接口(state-based)一种是面向对象对象的编程接口(object-based)

Pyplot封装了底层的绘图函数提供了一种绘图环境,使得我们可以直接像在MATLAB那样绘制图形。当我们使用import matplotlib.pyplot as plt语句导入pyplot模块,并使用plt.plot()绘制图形的时候,默认的Figure以及Axes等对象会自动创建以支持图形的绘制。Pyplot一来使得对MATLAB绘图熟悉的童鞋更加容易上手,二来屏蔽了一些底层通用的绘图对象的创建细节,使用更加简洁。

在使用面向对象的编程接口时候,我们需要自己创建画布(FigureCanvas)自己创建图对象(Figure)自己创建Axes(一个Figure可以包含一个或者多个Axes,一个Axes可以理解为一个子图,使用一次plot()绘图函数便会创建一个Axes),所有对象一起才能完成一次完整的绘图。使用面向对象编程接口有利于我们对于图形绘制的完整控制,但是相对于Pyplot接口可能需要书写更多的代码。

1. 认识Matploblib
1.1 Figure
在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。

import matplotlib.pyplot as plt
fig = plt.figure()

1.2 Axes
在拥有Figure对象之后,在作画前我们还需要轴,没有轴的话就没有绘图基准,所以需要添加Axes。也可以理解成为真正可以作画的纸。

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

上的代码,在一幅图上添加了一个Axes,然后设置了这个Axes的X轴以及Y轴的取值范围(这些设置并不是强制的),效果如下图:

对于上面的fig.add_subplot(111)就是添加Axes的,参数的解释的在画板的第1行第1列的第一个位置生成一个Axes对象来准备作画。也可以通过fig.add_subplot(2, 2, 1)的方式生成Axes,前面两个参数确定了面板的划分,例如 2, 2会将整个面板划分成 2 * 2 的方格,第三个参数取值范围是 [1, 2*2] 表示第几个Axes。如下面的例子:

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)

 

1.3 Multiple Axes
可以发现我们上面添加 Axes 似乎有点弱鸡,所以提供了下面的方式一次性生成所有 Axes:

fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0,0].set(title='Upper Left')
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')
fig 还是我们熟悉的画板, axes 成了我们常用二维数组的形式访问,这在循环绘图时,额外好用。