matplotlib 的 API 有 3 个层次
matplotlib.backend_bases.FigureCanvas,相当于一块画布,画出的图形都是要落到画布上的
matplotlib.backend_bases.Renderer,渲染器,相当于画笔和颜料,用来渲染图形
matplotlib.artist.Artist,艺术家,可以想象是一个艺术家的手,利用画笔和颜料(renderer)在画布(FigureCanvas)上画图
FigureCanvas 和 Renderer 属于底层的结构,用来控制 backend(用户界面如wxPython或者图形语言如PostScript),Artist 是上层接口,控制 figure,text,lines 等对象。用户 95% 的时间都是在和 Artist 打交道。
Artist 分为两类:primitives 和 containers,primitives 表示我们要渲染在画布上的标准的图形对象:Line2D, Rectangle, Text, AxesImage等,containers 是容纳这些图形对象的地方(Axis, Axes 和 Figure)。标准的流程是创建一个 Figure 实例,然后用 Figure 实例创建一个或多个 Axes 或 Subplot 实例,之后用 Axes 实例的方法创建 primitives。联系平日里画图的起手式,就很好理解了import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.add_subplot(2, 1, 1) # 创建 Axes 实例
Axes 可能是 matplotlib 中最重要的类,因为用户绝大部分时间都是在围着它转。因为 Axes 是主要的绘图区域,大多数图形对象都落在这个区域内,并且 Axes 还有很多特殊的辅助方法(plot(), text(), hist(), imshow())用来创建大多数通用的 primitives(Line2D, Text, Rectangle, Image),这些辅助方法会拿着用户的数据并根据需要创建 primitives 类型的 Artist 实例,加到相应的 containers 并渲染成图形。
大多数人可能对 Subplot 比较熟悉,它仅仅是 Axes 的一个特例,以 Subplot 实例的规则的行和列的网格形式呈现。如果你想在任意位置创建 Axes,只需要以一个列表[left, bottom, width, height] 为参数调用 add_axes() 方法就可以,列表中的元素是 0 – 1 之间的相对坐标。fig2 = plt.figure()
ax2 = fig2.add_axes([0.15, 0.1, 0.7, 0.3])
继续看我们的例子,t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)