Matplotlib基础教程

来源:互联网 发布:数据科学实战 编辑:程序博客网 时间:2024/06/05 14:44

刚开始学matplotlib,看了很多快速教程,虽然能快速上手画图,但是未能理解其中的原理,学习过于呆板,很难举一反三,现将目前所了解基础原理总结如下。

matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。

为了方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。

为了将面向对象的绘图库包装成只使用函数的调用接口,pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示”Get
Current Figure”和”Get Current
Axes”。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:
plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text,
etc.)一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。

可以使用subplot()快速绘制包含多个子图的图表,它的调用形式如下:

subplot(numRows, numCols, plotNum) subplot将整个绘图区域等分为numRows行*
numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

figure可以理解为一个画布即一个弹出窗口,axes可以理解为窗口的一部分,可以用来创建一个图像即这部分可以让我们作图。我们可以用如下方式创建figure以及axes:

import numpy as npimport matplotlib.pyplot as pltfig1 = plt.figure(1)  #创建figurefig2 = plt.figure(2)ax1 = fig1.add_subplot(211,facecolor='r')#在第一个figure中创建一个axesax2 = fig1.add_subplot(222,facecolor='g')ax3 = fig2.add_subplot(221,facecolor = 'b')plt.show()

另一种方式如下:

import numpy as npimport matplotlib.pyplot as pltplt.figure(1) # 创建图表1plt.figure(2) # 创建图表2ax1 = plt.subplot(211) # 在图表2中创建子图1ax2 = plt.subplot(212) # 在图表2中创建子图2x = np.linspace(0, 3, 100)for i in xrange(5):    plt.figure(1)  #❶ # 选择图表1    plt.plot(x, np.exp(i*x/3))    plt.sca(ax1)   #❷ # 选择图表2的子图1    plt.plot(x, np.sin(i*x))    plt.sca(ax2)  # 选择图表2的子图2    plt.plot(x, np.cos(i*x))plt.show()

matplotlib API包含有三层,Artist层处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。

直接使用Artists创建图表的标准流程如下:

  • 创建Figure对象
  • 用Figure对象创建一个或者多个Axes或者Subplot对象
  • 调用Axies等对象的方法创建各种简单类型的Artists
原创粉丝点击