matplotlib核心概念

来源:互联网 发布:h3c acl禁止445端口 编辑:程序博客网 时间:2024/06/06 03:27

matplotlib API包含有三层:

  • backend_bases.FigureCanvas : 图表的绘制领域
  • backend_bases.Renderer : 知道如何在FigureCanvas上如何绘图
  • artist.Artist : 知道如何使用Renderer在FigureCanvas上绘图

FigureCanvas和Renderer需要处理底层的绘图操作,例如使用wxPython在界面上绘图,或者使用PostScript绘制PDF。Artist则处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。画布->颜料->画家

Artists分为简单类型和容器类型两种。简单类型的Artists为标准的绘图元件,例如Line2D、 Rectangle、 Text、AxesImage 等等。而容器类型则可以包含许多简单类型的Artists,使它们组织成一个整体,例如Axis、 Axes、Figure等。

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

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

Artist的属性

图表中的每个元素都用一个matplotlib的Artist对象表示,而每个Artist对象都有一大堆属性控制其显示效果。例如Figure对象和Axes对象都有patch属性作为其背景,它的值是一个Rectangle对象。通过设置此它的一些属性可以修改Figrue图表的背景颜色或者透明度等属性

patch的color属性通过set_color函数进行设置,属性修改之后并不会立即反映到图表的显示上,还需要调用fig.canvas.draw()函数才能够更新显示。

下面是Artist对象都具有的一些属性:

  • alpha : 透明度,值在0到1之间,0为完全透明,1为完全不透明
  • animated : 布尔值,在绘制动画效果时使用
  • axes : 此Artist对象所在的Axes对象,可能为None
  • clip_box : 对象的裁剪框
  • clip_on : 是否裁剪
  • clip_path : 裁剪的路径
  • contains : 判断指定点是否在对象上的函数
  • figure : 所在的Figure对象,可能为None
  • label : 文本标签
  • picker : 控制Artist对象选取
  • transform : 控制偏移旋转
  • visible : 是否可见
  • zorder : 控制绘图顺序

Artist对象的所有属性都通过相应的 get_* 和 set_* 函数进行读写

Figure容器

最大的Artist容器是matplotlib.figure.Figure,它包括组成图表的所有元素。图表的背景是一个Rectangle对象,用Figure.patch属性表示。当你通过调用add_subplot或者add_axes方法往图表中添加轴(子图时),这些子图都将添加到Figure.axes属性中,同时这两个方法也返回添加进axes属性的对象,注意返回值的类型有所不同,实际上AxesSubplot是Axes的子类。

Figure对象有如下属性包含其它的Artist对象:

  • axes : Axes对象列表
  • patch : 作为背景的Rectangle对象
  • images : FigureImage对象列表,用来显示图片
  • legends : Legend对象列表
  • lines : Line2D对象列表
  • patches : patch对象列表
  • texts : Text对象列表,用来显示文字

使用方式:

>>> fig = plt.figure()>>> ax1 = fig.add_subplot(211)>>> ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])>>> ax1<matplotlib.axes.AxesSubplot object at 0x056BCA90>>>> ax2<matplotlib.axes.Axes object at 0x056BC910>>>> fig.axes[<matplotlib.axes.AxesSubplot object at 0x056BCA90>,<matplotlib.axes.Axes object at 0x056BC910>]

Axes容器

Axes容器是整个matplotlib库的核心,它包含了组成图表的众多Artist对象,并且有许多方法函数帮助我们创建、修改这些对象。和Figure一样,它有一个patch属性作为背景,当它是笛卡尔坐标时,patch属性是一个Rectangle对象,而当它是极坐标时,patch属性则是Circle对象。

下面详细列出Axes包含各种Artist对象的属性:

  • artists : Artist对象列表
  • patch : 作为Axes背景的Patch对象,可以是Rectangle或者Circle
  • collections : Collection对象列表
  • images : AxesImage对象列表
  • legends : Legend对象列表
  • lines : Line2D对象列表
  • patches : Patch对象列表
  • texts : Text对象列表
  • xaxis : XAxis对象
  • yaxis : YAxis对象

下面列出Axes的创建Artist对象的方法:

Axes的方法   所创建的对象        添加进的列表annotate    Annotate            textsbars        Rectangle           patcheserrorbar    Line2D, Rectangle   lines,patchesfill        Polygon             patcheshist        Rectangle           patchesimshow      AxesImage           imageslegend      Legend              legendsplot        Line2D              linesscatter     PolygonCollection   Collectionstext        Text                texts

使用方式:

>>> fig = plt.figure()>>> ax = fig.add_subplot(111)>>> rect = matplotlib.patches.Rectangle((1,1), width=5, height=12)>>> print rect.get_axes() # rect的axes属性为空None>>> rect.get_transform() # rect的transform属性为缺省值BboxTransformTo(Bbox(array([[  1.,   1.],       [  6.,  13.]])))>>> ax.add_patch(rect) # 将rect添加进ax<matplotlib.patches.Rectangle object at 0x05C34E50>>>> rect.get_axes() # 于是rect的axes属性就是ax<matplotlib.axes.AxesSubplot object at 0x05C09CB0>
0 0