matplotlib笔记(基于 matplotlib 1.5.1 )

一、matplotlib配置

  1. matplotlib配置信息是从配置文件中读取的。在配置文件中可以为matplotlib几乎所有的属性指定永久有效的默认值。

  2. 查看配置:你可以通过 matplotlib.rcParams字典访问所有已经加载的配置项

    查看matplotlib配置

  3. 修改配置:

    • 你可以通过 matplotlib.rcParams字典修改所有已经加载的配置项

      通过rcParams修改配置

    • 你可以通过matplotlib.rc(*args,**kwargs)来修改配置项,其中args是你要修改的属性,kwargs是属性的关键字属性

      通过rc函数修改配置

    • 你可以调用matplotlib.rcdefaults()将所有配置重置为标准设置。

      恢复默认配置

  4. 配置文件:如果不希望在每次代码开始时进行参数配置,则可以在项目中给出配置文件。配置文件有三个位置:

    • 系统级配置文件。通常在python的site-packages目录下。每次重装matplotlib之后该配置文件就会被覆盖。

    • 用户级配置文件。通常在$HOME目录下。可以用matplotlib.get_configdir()函数来查找当前用户的配置文件目录。可以通过MATPLOTLIBRC修改它的位置。

      恢复默认配置

    • 当前工作目录。即项目的目录。在当前目录下,可以为目录所包含的当前项目给出配置文件,文件名为matplotlibrc

    优先级顺序是: 当前工作目录 > 用户级配置文件 > 系统级配置文件。查看当前使用的配置文件的路径为: matplotlib.matplotlib_fname()函数。

    配置文件的内容常见的有以下几种:

    • axes:设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
    • backend:设置目标输出TkAgg和GTKAgg
    • figure:控制dpi、边界颜色、图像大小和子区(subplot)设置
    • font:字体(font family)、字体大小和样式设置
    • grid:设置网格颜色和线型
    • legend:设置图例以及其中的文本显示
    • line:设置线条(颜色、线型、宽度等)和标记
    • patch: 填充2D空间的图形图像,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
    • savefig:对保存的图形进行单独设置。如渲染的文件背景为白色。
    • text:设置字体颜色、文本解析(纯文本和latex标记)等。
    • verbose:设置matplotlib执行期间的信息输出,如silent、helpful、debug和debug--annoying
    • xticks和yticks:为x、y轴的主刻度和次刻度设置颜色、大小、方向以及标签大小

二、 matplotlib Artist

  1. matplotlib有三个层次的API:

    • matplotlib.backend_bases.FigureCanvas:代表了一个绘图区,在这个绘图区上图表被绘制
    • matplotlib.backend_bases.Renderer:代表了渲染器,它知道如何在绘图区上绘图。
    • matplotlib.artist.Artist:代表了图表组件,它知道如何利用渲染器在绘图区上绘图。

    通常用于有95%以上的时机都是与matplotlib.artist.Artist类打交道,它是高层次的绘图控制。

  2. matplotlib中有两种Artist

    • primitive:代表了我们在绘图区域上绘制的基础的绘图组件,比如Line2DRectangleText 以及AxesImage等等。

    • container:代表了放置primitive的那些绘图组件。比如AxisAxes以及Figure,如图所示

      Artist

  3. matplotlib的标准使用流程为:

    • 创建一个Figure实例对象fig
    • 使用fig实例创建一个或者多个Axes实例,或者创建一个或者多个Subplot实例
    • 使用Axes实例的方法来创建primitive
  4. 每个在图形中出现的元素都是Artist。其属性有:

    • Figure.patch属性:是一个Rectangle,代表了图表的矩形框,它的大小就是图表的大小, 并且可以通过它设置图表的背景色和透明度。

    • Axes.patch属性:也是一个Rectangle,代表了绘图坐标轴内部的矩形框(白底黑边), 通过它可以设置Axes的颜色、透明度等。

    • 所有的Artist有下列属性。:

      • .alpha属性:透明度。值为0--1之间的浮点数
      • .animated属性:一个布尔值,表示是否用于加速动画绘制
      • .axes属性:返回这个Artist所属的axes,可能为None
      • .clip_box属性:用于剪切Artistbounding box
      • .clip_on属性:是否开启clip
      • .clip_path属性:Artist沿着该path执行clip
      • .contains属性:一个picking function用于测试Artist是否包含pick point
      • .figure属性:该Artist所属的Figure,可能为None
      • .gid属性:该Artistid字符串
      • .label:一个text label
      • .picker:一个python object用于控制object picking
      • .transform:转换矩阵
      • .url属性:一个url string,代表本Artist
      • .visible:布尔值,控制Artist是否绘制
      • .zorder:决定了Artist的绘制顺序。zorder越小就越底层,则越优先绘制。

    这些属性可以通过旧式的settergetter函数访问和设置。如:o.get_alpha()o.set_alpha(0.5)。如果你想一次设置多个属性,也可以用:o.set(alpha=0.5,zorder=2)这种方式。你可以使用matplotlib.artist.getp(o)来一次获取o的所有属性。

    当然你可以使用pyplot.getp(o,"alpha")来获取属性(一次只能返回一个属性),如果指定属性名,则返回对象的该属性值;如果不指定属性名,则返回对象的所有的属性和值。用pyplot.setp(o,alpha=0.5,zorder=2)来设置属性(一次可以设置多个属性)

    Artist所有属性

1. container Artist:

a. Figure

  1. matplotlib.figure.Figure是最顶层的container Artist,它包含了图表中的所有元素。

    • Figure.patch属性:Figure的背景矩形
    • Figure.axes属性:持有的一个Axes实例的列表(包括Subplot)
    • Figure.images属性:持有的一个FigureImages patch列表
    • Figure.lines属性:持有一个Line2D实例的列表(很少使用)
    • Figure.legends属性:持有的一个Figure Legend实例列表(不同于Axes.legends)
    • Figure.patches属性:持有的一个Figure pathes实例列表(很少使用)
    • Figure.texts属性:持有的Figure Text实例列表

    其他的属性:

    • Figure.figsize属性:图像的尺寸,(w,h),以英寸为单位
    • Figure.dpi属性:图像分辨率
    • Figure.facecolor属性:背景色
    • Figure.edgecolor属性:edge color
    • Figure.linewidthedge linewidth
    • Figure.frameon:如果为False,则不绘制图像
    • Figure.subplotpars:一个SubplotParams实例
    • Figure.tight_layout:如果为False,则使用subplotpars;否则使用tight_layout()调整subplot parameters
  2. 当你执行Figure.add_subplot()或者Figure.add_axes()时,这些新建的Axes都被添加到Figure.axes列表中。

  3. 由于Figure维持了current axes,因此你不应该手动的从Figure.axes列表中添加删除元素,而是要通过Figure.add_subplot()Figure.add_axes()来添加元素,通过Figure.delaxes()来删除元素。但是你可以迭代或者访问Figure.axes中的Axes,然后修改这个Axes的属性。

  4. 可以通过Figure.gca()获取current axes,通过Figure.sca()设置current axes

  5. Figure也有它自己的textlinepatchimage。你可以直接通过add primitive语句直接添加。但是注意Figure默认的坐标系是以像素为单位,你可能需要转换成figure坐标系:(0,0)表示左下点,(1,1)表示右上点。

    Figure

  6. 创建Figure的方法:

    • num:一个整数或者字符串。

      • 若未提供,则创建一个新的figure
      • 如果给出了一个整数,而且某个现有的figure对象的number属性刚好等于这个整数,则激活该figure并且返回该figure;否则创建一个新的figure
      • 如果是个字符串,则创建一个新的figure,并且将window title设置为该字符串。
    • figsize:一对整数的元组。给出了英寸为单位的高度和宽度。默认由rcfigure.figsize给出

    • dpi:一个整数,给出figure的分辨率。默认由rcfigure.dpi给出

    • facecolor:背景色。若未提供,则由rcfigure.facecolor给出

    • edgecolorborder color。若未提供,则由rcfigure.edgecolor给出

    返回一个figure

1>. Figure 的一些方法
  1. add_axes(*args, **kwargs):创建一个Axes对象。如果已经存在同样位置同样参数的一个Axes,则返回该Axes,并将其设为current Axes。其参数有:

    • rect:一个元组,代表了(left,bottom,width,height),它是第一个位置参数
    • axisbg:一个color,背景色
    • frameon:布尔值,是否display frame
    • sharex:另一个Axes对象,与该Axes共享 xaxis
    • sharey:另一个Axes对象,与该Axes共享 yaxis
    • projection:坐标系类型。projection='polar'也等价于polar=True
    • aspect:一个数值,指定xy轴每个单位的尺寸比例。也可以设定为字符串'equal'/'auto'
    • 关键字参数为projection+Axes的合法关键字

    如果你想在同样的一个rect创建两个Axes,那么你需要设置label参数。不同的Axes通过不同的label鉴别。

    如果你使用了fig.delaxes()Figure中移除了ax,那么你可以通过fig.add_exes(ax)来将其放回。

  2. add_subplot(*args,**kwargs):创建一个subplot。如果已经存在同样位置同样参数的一个subplot,则返回该subplot,并将其设为current Axes

    • 关键字参数为projection+Axes的合法关键字。projection:坐标系类型。projection='polar'也等价于polar=True
    • 位置参数为:add_subplot(nrows, ncols, plot_number)。表示nrows行, nclos列每个单元格是一个sub-axesplot_number给出了指定的sub-axes,从 1开始。最大为nrows*ncols。当这三个数字都是个位数时,可以使用一个三位数代替,每位代表一个数。
    • axisbg:一个color,背景色
    • frameon:布尔值,是否display frame
    • sharex:另一个Axes对象,与该Axes共享 xaxis
    • sharey:另一个Axes对象,与该Axes共享 yaxis
    • projection:坐标系类型。projection='polar'也等价于polar=True
    • aspect:一个数值,指定xy轴每个单位的尺寸比例。也可以设定为字符串'equal'/'auto'
  3. autofmt_xdate(bottom=0.2, rotation=30, ha='right'):用于设置Date ticklabel的位置。bottom设置距离subplot底部的位置。rotation设置了xtick label的旋转角度。ha设置xtick label的对其方式。该函数主要用于当xtick为日期,可能会重叠,因此可以旋转一个角度

  4. clear():清除一个figure

  5. clf(keep_observers=False):清除一个figure。如果keep_observers=True,则gui仍然会跟踪figure中的axes

  6. colorbar(mappable, cax=None, ax=None, use_gridspec=True, **kw):为mappable创建一个colorbar。其中:

    • mapple:一个ScalarMapple实例。它可以是Image/ContourSet...
    • cax:指定在哪个axes中绘制colorbar。也可以是None
    • ax:None | parent axes object(s) from which space for a new colorbar axes will be stolen.
    • use_gridspec:False | If cax is None, a new cax is created as an instance of Axes. If ax is an instance of Subplot and use_gridspec is True, cax is created as an instance of Subplot using the grid_spec module
  7. delaxes(a):从figure中移除axes

  8. gca(**kwargs):返回current axes。如果不存在则创建一个

  9. get_children():获取figure中包含的artists

  10. get_dpi/get_edgecolor/get_facecolor/get_figheight/get_figwidth/ get_frameon/get_tight_layout...:获取对应的属性值

  11. get_size_inches():返回fig的当前尺寸(单位为英寸。1in=2.54cm

  12. legend(handles, labels, *args, **kwargs):创建图例。

    • handles:是一个Lin2D/Patch等实例的一个序列
    • labels:是个字符串序列,用于给上述实例添加图例说明
    • loc:指定图例的位置。可以是字符串'best'/'upper right'/'upper left' /'lower left'/'lower right'/'right'/'center left'/'center right' /'lower center'/'upper center'/'center'。你也可以指定坐标(x,y),其中(0,0)是左下角,(1,1)是右上角
    • numpoint/scatterpoints:图例上每个图例线的点数
    • fancybox:如果为True,图例的边框采用圆角矩形
    • shadow:如果为True,图例添加背影
    • ncol:列数
    • title:图例的标题
    • framealpha:一个浮点数,从0到 1,图例的透明度
    • frameon:一个布尔值,如果为True,则绘制图例的背景框。否则不绘制。
  13. savefig(fname, dpi=None, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1,frameon=None):保存图像。

    • fname:带路径的文件名。
    • dpi:保存的分辨率。
    • facecolor/edgecolorfigure rectangle的背景色和边线颜色
    • orientation:可以为'landscape' | 'portrait'
    • format:图片格式。可以为'png'/'pdf'/'svg'/'eps'...
    • transparent:如果为True,设置figureaxes背景透明(除非你设置了facecolor/edgecolor
    • frameon:如果为False,则图形背景透明
  14. sca(a):设置acurrent axes并返回它

  15. set_dpi/set_edgecolor...:设置相关属性

  16. show(warn=True):显示图像。如果warn=True,则开启警报

  17. subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None):调整subplot的位置。

  18. suptitle(t, **kwargs):设置图像标题。t为标题字符串。关键字参数就是Text对象的参数:

    • x:在图形坐标系中,标题的横坐标(范围 0~1)
    • y:在图形坐标系中,标题的纵坐标(范围 0~1)
    • horizontalalignment:标题水平对齐方式,默认为'center'
    • verticalalignment:标题垂直对齐方式,默认为'top'
    • fontsize:字体大小
  19. text(x, y, s, *args, **kwargs):添加文本。

    • x:在图形坐标系中,标题的横坐标(范围 0~1)
    • y:在图形坐标系中,标题的纵坐标(范围 0~1)
    • s:文本字符串
  20. tight_layout(renderer=None, pad=1.08, h_pad=None, w_pad=None, rect=None):调整subplot的间距。

    • pad:设定subplotfigure edge之间的距离。单位为font-size
    • h_pad/w_padsubplot之间的高距/宽距。

b. Axes类

  1. Axes类是matplotlib的核心,你在大多数时间都是在与它打交道。Axes代表了plotting area。大量的用于绘图的Artist存放在它内部,并且它有许多辅助方法来创建和添加Artist给它自己,而且它也有许多赋值方法来访问和修改这些Artist

    它有许多方法用于绘图,如.plot().text().hist().imshow()等方法用于创建大多数常见的primitive(如Line2DRectangleTextImage等等)。这些方法会创建primitive Artist实例,并且添加这些实例到对应的container上去,然后必要的时候会绘制这些图形。

  2. Subplot就是一个特殊的Axes,其实例是位于网格中某个区域的Subplot实例。其实你也可以在任意区域创建Axes,通过Figure.add_axes([left,bottom,width,height])来创建一个任意区域的Axes,其中left,bottom,width,height都是[0--1]之间的浮点数,他们代表了相对于Figure的坐标。

    Axes类

  3. Axes包含了一个.patch属性,对于笛卡尔坐标系而言,它是一个Rectangle;对于极坐标而言,它是一个Circle。这个.patch属性决定了plotting region的形状、背景和边框。

    Axes背景

  4. 当调用Axes.plot()方法时,该方法会创建一个matplotlib.lines.Line2D实例,然后会利用传给.plot()的关键字参数来更新该Line2D的属性,然后将这个Line2D添加到Axes.lines列表中。该方法返回的刚创建的Line2D列表,因为你可以传递多个(x,y)值从而创建多个Line2D

    当调用Axes.hist()方法时,类似于.plot()方法,不过它会添加patchesAxes.patches列表。

    Axe绘图方法

  5. 你不应该直接通过Axes.linesAxes.patches列表来添加图表。因为当你通过.plot().hist()等方法添加图表时,matplotlib会做许多工作而不仅仅是添加绘图组件到Axes.lines或者Axes.patches列表中。

    但是你可以使用Axes的辅助方法.add_line().add_patch()方法来添加。

    Axe手动添加绘图组件

  6. 下面是Axes用于创建primitive Artist以及添加他们到相应的container中的方法:

    • ax.annotate():创建text annotationAnnotate对象),然后添加到ax.texts列表中。
    • ax.bar():创建bar chartRectangle对象),然后添加到ax.patches列表中。
    • ax.errorbar():创建error bar plotLine2D对象和Rectangle对象),然后添加到ax.lines 列表中和ax.patches列表中。
    • ax.fill():创建shared areaPolygon对象),然后添加到ax.patches列表中
    • ax.hist():创建histogramRectangle对象),然后添加到ax.patches列表中。
    • ax.imshow():创建image dataAxesImage对象),然后添加到ax.images列表中。
    • ax.legend():创建axes legendsLegend对象),然后添加到ax.legends列表中。
    • ax.plot():创建xy plotLine2D对象),然后添加到ax.lines列表中。
    • ax.scatter():创建scatter chartsPolygonCollection对象),然后添加到 ax.collections列表中。
    • ax.text():创建textText对象),然后添加到ax.texts列表中。
  7. 另外Axes还包含两个最重要的Artist container

    • ax.xaxisXAxis对象的实例,用于处理xtick以及label的绘制
    • ax.yaxisYAxis对象的实例,用于处理ytick以及label的绘制

    Axes包含了许多辅助方法来访问和修改XAxisYAxis,这些辅助方法其实内部调用的是XAxisYAxis的方法。因此通常情况下你不需要直接调用XAxisYAxis的方法。

    Axe坐标轴

1>. Axes 的一些方法
  1. acorr(x, **kwargs):绘制序列x的自相关。

    • x:一个标量序列。对x执行自相关
    • normed:一个布尔值,如果为True,则对数据正则化处理
    • maxlags:一个整数,默认为10.它给出了要展示多少个lag。如果为None,则使用所有的2*len(x)-1
    • 其他kwargs:控制了Line2D的属性

    返回: (lags,c,lin,b)

    • lags:是一个长度为2*maxlags+lag vector
    • c:是长度为2*maxlags+的自相关向量
    • line:是一个Line2D实例
    • b:是x-axis acorr
  2. add_artist(a):添加a(一个Artist对象)到axes

  3. add_collection(collection, autolim=True):添加Collection实例到axes

  4. add_container(container):添加Container实例到axes

  5. add_image(image):添加Image实例到axes

  6. add_line(line):添加Line2D实例到axes

  7. add_patch(p):添加Patch实例到axes

  8. add_table(tab):添加Table实例到axes

  9. annotate(*args, **kwargs):对坐标点(x,y)绘制注解。

    • s:注解字符串

    • xy:一个长度为2的序列,给出了坐标点的(x,y)坐标

    • xytext:一个长度为2的序列,给出了注解字符串的(x,y)坐标

    • xycoords:给出了坐标点的(x,y)所对应的坐标系。可以为'figure points''figure pixels''figure fraction''axes points''axes pixels''axes fraction''data'。其中figure表示Figure坐标系,axes表示Axes坐标系,data表示被注解的点所在的数据坐标系。points表示单位为点(分辨率的点);pixels表示单位为像素,fraction表示:(0,0) 为左下角,(1,1) 为右上角

    • textcoords:给出了注解字符串的(x,y)所对应的坐标系。可以为xycoords允许的值之外,还可以为:

      • 'offset points':偏移被注解的坐标点的距离为 (x,y)个点(分辨率的点)
      • 'offset pixels':偏移被注解的坐标点的距离为 (x,y)个像素
    • arrowprops:一个字典,给出了箭头的类型。

      • 若字典不包含arrowstyle,则可以使用下面的键: width/headwidth/headlength/shrink以及其他的FancyArrowPatch的属性。
      • 如果字典包含了arrowstyle,则上面的这些键将被屏蔽。arrowstyle的值可以为: '-''->''-[''|-|''-|>''<-''<->''<|-''<|-|>''fancy''simple''wedge'
    • annotation_clip:一个布尔值。如果为True,则超出axes的部分将会不可见

    annotate

  10. autoscale_view(tight=None, scalex=True, scaley=True):自动调整坐标轴的范围。如果你不想自动调整x轴,则scalex=False即可。y轴类似。

  11. arrow(x, y, dx, dy, **kwargs):绘制箭头。箭头起点为 (x,y),终点为 (x+dx,y+dy)。你也可以使用annotate()来模拟本方法。

    • x,y:箭头起点坐标(data坐标系)
    • dxx,dy:箭头终点坐标为 (x+dx,y+dy)data坐标系)
    • width:箭头宽度
    • length_includes_head::如果为True,则箭头的头部也算在箭头长度内
    • head_width:箭头的头部宽度
    • head_length:箭头的头部长度
    • shape:可以为'full'/'left'/'right'。确定是绘制左半边/右半边还是全部画出
    • 其他参数控制了Patch的属性

    arrow

  12. axhline(y=0, xmin=0, xmax=1, **kwargs):绘制水平线。

    • y:一个标量,默认为 0.给出了水平的 y坐标(采用data坐标系)
    • xmin:一个标量,默认为 0。给出了水平线的起始横坐标。最大为 1(表示最右侧)(使用Axes坐标系)
    • xmax:一个标量,默认为 1。 给出了水平线的终点横坐标。最小为 0 (表示最左侧)(使用Axes坐标系)
    • 其他关键字参数控制Line2D的属性

    axhline

  13. axhspan(ymin, ymax, xmin=0, xmax=1, **kwargs):绘制水平区域。

    • ymin/ymax:给出了水平区域的y坐标的下界和上界,采用data坐标系
    • xmin/xmax:给出了水平区域的左侧和右侧的位置。采用Axes坐标系,最小为0,最大为 1
    • 其他关键字参数控制Line2D的属性

    axhspan

  14. axis(*v, **kwargs):设置axis属性,它返回的是(xmin,xmax,ymin,ymax)data坐标系下每个轴的最小值、最大值。

    • v: Axis data limits set from a float list。也可以是字符串:

      • 'on':Toggle axis lines and labels on
      • 'off':Toggle axis lines and labels off
      • 'equal':Equal scaling by changing limits
      • ''tight:Limits set such that all data is shown
      • 'auto':Automatic scaling, fill rectangle with data
    • xmin/ymin/ymax/ymax:待设置的轴的最小/最大值

  15. axvline(x=0, ymin=0, ymax=1, **kwargs):绘制垂直线。

    • x:一个标量,默认为 0.给出了垂直线的 x坐标(采用data坐标系)
    • ymin:一个标量,默认为 0。给出了垂直线的起始纵坐标。最大为 1(表示最上侧)(使用Axes坐标系)
    • ymax:一个标量,默认为 1。 给出了垂直线的终点纵坐标。最小为 0 (表示最下侧)(使用Axes坐标系)
    • 其他关键字参数控制Line2D的属性

    axvline

  16. axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs):绘制垂直区域。

    • xmin/xmax:给出了垂直区域的x坐标的左侧和右侧,采用data坐标系
    • ymin/ymax:给出了垂直区域的上侧和下侧的位置。采用Axes坐标系,最小为0,最大为 1
    • 其他关键字参数控制Line2D的属性

    axvspan

  17. bar(left, height, width=0.8, bottom=None, **kwargs):绘制一个bar

    • left:一个标量或者标量的序列,bar的左侧的x坐标,采用data坐标系
    • height:一个标量或者标量的序列,bar的高度,采用data坐标系
    • width:一个标量或者标量的序列,bar的宽度,默认为 0.8,采用data坐标系
    • bottom:一个标量或者标量的序列,bar的底部的y坐标,默认为 0,采用data坐标系
    • color:一个标量或者标量的序列,bar的背景色
    • edgecolor:一个标量或者标量的序列,bar的边色颜色
    • linewidth:一个标量或者标量的序列,bar的边的线宽
    • tick_label:一个字符串或者字符串的序列,给出了barlabel
    • xerr:一个标量或者标量的序列,用于设置barerrorbar。(水平方向的小横线)
    • yerr:一个标量或者标量的序列,用于设置barerrorbar(垂直方向的小横线)
    • ecolor:一个标量或者标量的序列,用于设置errorbar
    • capsize:一个标量,用于设置errorbar。小横线头部的一个小短线
    • error_kw:一个字典,用于设置errorbar。如ecolor/capsize关键字
    • align:一个字符串,设定bar的对齐方式。可以为'edge'或者'center'。柱子的左边跟x=left线对齐,还是柱子的中线跟x=left线对齐。
    • orientation:一个字符串,指定bar的方向。可以为'vertical'或者'horizontal'。它决定了errbarlabel放置的位置。
    • log:一个布尔值,如果为True,则设置axis为对数坐标

    返回matplotlib.container.BarContainer.

    你可以一次添加多个bar,此时就是上述的“标量的序列”。 bar

  18. barh(bottom, width, height=0.8, left=None, **kwargs):绘制水平的bar

    • bottom:一个标量或者标量的序列,bar的底部的y坐标,默认为 0,采用data坐标系
    • width:一个标量或者标量的序列,bar的宽度,默认为 0.8,采用data坐标系
    • height:一个标量或者标量的序列,bar的高度,采用data坐标系
    • left:一个标量或者标量的序列,bar的左侧的x坐标,采用data坐标系
    • 其他参数参考 bar方法

    它就是bar(orientation='horizontal')

    barh

  19. cla()/clear():清除Axes

  20. clabel(CS, *args, **kwargs):为等高线添加label

    • CS:由contour函数返回的ContourSet,代表一组等高线
    • fontsizelabel的字体大小,或者给出字符串'smaller'/'x-large'
    • colors:如果为None,则使用对应的等高线的颜色。如果为一个字符串指定的颜色,则所有的等高线label使用该颜色。如果为一组颜色,则不同的等高线的label按顺序使用其中的不同的颜色。
    • inline:一个布尔值。如果为True,则移除label覆盖的底层的等高线(嵌入式);否则就全部绘制(重叠式)
    • inline_spacing:一个浮点数,单位为像素点。它控制了label距离等高线的距离

    clabel

  21. contour(*args, **kwargs):绘制等高线。它返回一个QuadContourSet对象 最常用的四种方式:

    • contour(Z):其中 Z为二维数组。数据坐标系下的坐标点 (i,j)对应了Z[j,i]x轴对应列,y轴对应行)。该方法随机挑选一些等高线绘制。

    • contour(X,Y,Z):其中 X/Y/Z均为二维数组,且形状相同。对应位置的横坐标由 X提供,纵坐标由 Y提供,值由 Z 提供。该方法随机挑选一些等高线绘制。

      XY也可以同时是一维数组,且len(X)Z的列数,len(Y)Z的行数。

    • contour(Z,N)/contour(X,Y,Z,N)N为一个整数,表示绘制N条等高线。该方法随机挑选N条等高线绘制。

    • contour(Z,V)/contour(X,Y,Z,V)V为一个递增的序列,表示绘制那些值位于V中的等高线

    contour contour

    其他关键字参数:

    • colors:如果为None,则由cmap给出。如果是一个字符串,这所有的等高线由字符串指定的颜色给出。如果是一个序列,该序列中每个都代表了一个颜色,则等高线的颜色依次由该序列给出。

    • cmap:一个Colormap对象。如果为None,则默认的Colormap将被使用

    • levels:一个序列(升序排列)。指定了要绘制等高线值位于levels的等高线。

    • origin:参考Axes.imshow中的该参数设置。

    • extent:它是一个元组(x0,x1,y0,y1)。如果给出了(X,Y),则该参数无效。如果未给出(X,Y)

      • 如果originNone,则它给出了外边界, Z[0,0]位于图形中间
      • 如果originNone,则(x0,y0)对应Z[0,0](x1,y1)对应Z[-1.-1],等价于同时使用了set_xlim(left,right)+set_ylim(bottom,top)
    • antialiased:一个布尔值,用于开启/关闭反走样

    • linewidths:如果为None,则使用默认值。如果为一个整数,则所有的等高线都是用该线宽。如果为一个整数序列,则等高线依次使用它指定的线宽。只有contour适用

    • linestyles:如果为None,则使用默认的实线。你也可以指定为'solid'/'dashed'/'dashdot'/'dotted'。你可以指定搜有的等高线使用一种线型,也可以使用一个线型序列。只有contour适用

  22. contourf(*args, **kwargs):它绘制的是带填充的等高线。其参数和用法基本和contour相同。它返回一个QuadContourSet对象

    • contourf(Z,V)/contourf(X,Y,Z,V)V是递增的序列,指定了等高线的值。该方法会填充V中相邻两个等高线之间的区域
    • contourf不同与contour的关键字参数为hatches:它指定了填充区域的填充类型(如以小斜线填充)。如果为None,则无任何hatch。它典型值为hatches=['.', '/', '\', None, '\\', '*','-',]
    • contourf填充的是半开半闭区间(z1,z2]

    contourf

  23. errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, **kwargs):绘制errorbar,返回(plotline, caplines, barlinecols)

    • x:一个序列,指定x坐标
    • y:一个序列,指定y坐标。即: y=f(x)
    • yerr:指定yerror。如果为标量,则每个点都是相同的error;如果为一维向量,则依次给出了每个点的error。如果是个二维向量,则依次给出了每个点的上error和下error
    • xerr:指定xerror。如果为标量,则每个点都是相同的error;如果为一维向量,则依次给出了每个点的error。如果是个二维向量,则依次给出了每个点的左error和右error
    • fmt:可以为空字符串,或者'none'或者其他的plot format string。如果是'none'则只有errorbars能够被绘制
    • ecolor:指定了errorbar的颜色
    • elinewidth:指定了errorbar的线宽
    • capsize:指定了errorbar头部的小横线的宽度
    • errorevery:一个整数。如果为 4, 则每隔 4个点才绘制一个errorbar
    • 其他的关键字参数都是用于指定marker的类型。如: `marker='s', mfc='red', mec='green', ms=20, mew=4。他们是markderfacecolor,markeredgecolor,markdersize,markderedgewidth`的缩写。

    errorbar

  24. eventplot(positions, orientation='horizontal', lineoffsets=1, linelengths=1, linewidths=None, colors=None, linestyles='solid', **kwargs) :绘制时间线。时间线就是在指定位置上并排的一系列线段。返回 matplotlib.collections.EventCollection的一个列表

    • positions:一个一维或者二维的数组。每一行代表了一组直线
    • orientation:可以为'horizonal'|'vertical',代表了摆放时间线的方式。如果是水平走向的,则垂直摆放直线;如果是垂直走向的,则水平放置直线
    • lineoffsets:一个浮点数或者浮点数的序列,指定了时间线中轴距离y=0的偏离值
    • linelengths:一个浮点数或者浮点数的序列,指定了线的长度
    • linewidths:一个浮点数或者浮点数的序列,指定了线的宽度
    • colors:一个颜色或者一组颜色,指定了线的颜色。颜色可以为颜色字符串,或者一个RGB元组。
    • linestyles:一个线型或者一组线型,指定了线型。线型在'solid' | 'dashed' | 'dashdot' | 'dotted'四者之一

    如果positions是一个一维数组,表示绘制一组时间线。那么lineoffsets/linelengths/linewidths/colors/linestyles都是标量值,指定该组时间线的格式。如果positions是一个二维数组则,有多少行,就有多少组时间线。制定时间线格式的这些参数都是序列,序列长度就是positions的行数。

    eventplot

  25. fill(*args, **kwargs):绘制多边形。返回一个Patch列表。其常用的方式为:

    • 绘制一个多边形: fill(x,y,'b'),其中x为多边形的边上的点的x坐标;y为多边形的边上的点的y坐标。'b'为多边形的填充颜色。

    • 绘制多个多边形: fill(x1,y1,'b',x2,y2,'r')。这里指定多个x,y,color就可以。

    • closed关键字参数:一个布尔值,确定是否封闭多边形(即多一条从起点到终点的边)。默认为True

    • plot()支持的color string在这里也被支持

    • 剩下的关键字参数用于控制Polygon的属性。如

      • hatch:一个字符串,指定填充方式,如['/' | '\' | '|' | '-' | '+' | 'x' | 'o' | 'O' | '.' | '*']
      • label:一个字符串,指定标签
      • fill:一个布尔值,决定是否填充
      • facecolor/edgecolor/color:颜色

    fill

  26. fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, **kwargs):绘制填充区域。它填充两个曲线之间的部分。它返回一个PolyCollection对象。

    • x:一个序列,指定x坐标
    • y1:第一条曲线的纵坐标。如果为标量,说明该曲线为水平线。
    • y2:第二条曲线的纵坐标。如果为标量,说明该曲线为水平线。
    • where:指定填充哪里。如果为None,则填充两条曲线之间的所有区域,这是默认值。如果非None,则他是一个一维布尔数组,长度与x相同。只有为True对应的x处才被填充。
    • interpolate:一个布尔值。如果True,则进行插值计算来寻找两个曲线的交点。如果为False,则不进行插值。
    • step:可以为'pre'/'post'/'mid'或者None,设定填充区域的边界的形状。 fill_between
  27. fill_betweenx(y, x1, x2=0, where=None, step=None, **kwargs):绘制填充区域。该区域是以y为自变量,x为函数的两条曲线合围而成。它返回一个PolyCollection对象。

    • y:一个序列,为纵坐标
    • x1:第一个曲线的x坐标。它是一个反函数,即以y为自变量
    • x2:第二个曲线的y坐标。它也是一个反函数
    • where:指定填充哪里。如果为None,则填充两条曲线之间的所有区域,这是默认值。如果非None,则他是一个一维布尔数组,长度与y相同。只有为True对应的y处才被填充。
    • step:可以为'pre'/'post'/'mid'或者None,设定填充区域的边界的形状。

    通常建议提供一个alpha参数,用于设定填充的透明度。如果同一个区域被多个fill_between()填充,那么设定alpha之后会让每一层都能显示出来。

    fill_between沿着x轴填充;fill_betweenx沿着y轴填充

    fillbetweenx

  28. findobj(match=None, include_self=True):筛选出合适的artist对象,返回一个列表。他会递归的向下搜寻

    • match指定过滤器。

      • 如果为None,则它选出axes包含的所有artist
      • 如果为一个函数,则函数接受一个artist参数,返回布尔值。所有返回Trueartist被选中
      • 如果是一个类,则返回属于该类的artist
    • include_self:如果为True,则也检查自己

  29. get_xx函数:返回对应的属性值。有: get_alpha/get_anchor/get_animated/get_aspect/get_axis_bgcolor/ get_axisbelow/get_clip_box/get_clip_path/get_frame_on/get_gid get_label/get_legend/get_lines/get_title/get_transform/get_visible get_xaxis/get_xlabel/get_xlim/get_xscale/get_xticklabels/get_yaxis...

  30. grid(b=None, which='major', axis='both', **kwargs):开启关闭网格。

    • b为布尔值,指定你想开启(True)还是关闭网格
    • which:可以为'major'/'minor'/'both',指定你想开启哪个级别的网格
    • axis:可以为'x'/'y'/'both',指定你想在那个轴上开启网格
    • 其他的关键字参数设定了网格的线条类型。如color/linestype/linewidth

    还有一种简单用法,就是axes.grid(),此时表示:如果网格开启,则关闭。如果网格关闭,则开启。

  31. hexbin(x, y, C=None, gridsize=100, bins=None, xscale='linear', yscale='linear', extent=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors='none', reduce_C_function=<function mean>, mincnt=None, marginals=False, **kwargs):绘制hexbin。它用于同一个地方有很多点的情况,是六边形面元划分,是一种二元直方图。返回一个PolyCollection对象。

    • x/y:一维数组,它们形状相同。它们给出了绘制六边形面元的点。

    • C:如果非None,则它给出了坐标(x[i],y[i])count value。它和x长度相同,也是一维数组

      x/y/C也可能是masked array,此时只有unmasked的点才被绘制

    • reduce_C_function:将坐标(x[i],y[i])count value进行归并。因为同一个坐标可能被设定了多个count value。而每个点根据其count value来染色

    • gridsize:一个整数。它调整了六边形面元x方向的尺寸,y方向的尺寸自动选取。你也可以设定它为一个元组,同时调整x/y方向的尺寸。它实际上给出的是x轴可以放置的面元数量,因此该数值越大,六边形面元尺寸越小。

    • bins

      • 如果为None,则每个六边形面元的颜色值直接对应了它的count value
      • 如果为'log',则每个六边形面元的颜色值对应了它的count value+1的对数值
      • 如果为一个整数, divide the counts in the specified number of bins, and color the hexagons accordingly
      • 如果为一个整数序列,则the values of the lower bound of the bins to be used
    • xscale:可以为'linear'/'log',设置了x轴是线性还是对数

    • scale:可以为'linear'/'log',设置了y轴是线性还是对数

    • mincnt:一个整数或者None。它指定显示这一类的面元:面元包含的坐标点的数量超过mincnt。对于面元包含坐标点数量少于mincnt的,不显示。

    • marginals:一个布尔值。如果为True,则沿着坐标轴绘制密度条。

    • extent:一个元组(left, right, bottom, top),等价于同时使用了set_xlim(left,right)+set_ylim(bottom,top)

    • 剩下的参数设定颜色和面元的属性。

    hexbin hexbin

  32. hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs) :绘制直方图。 其返回值为:

    • 如果绘制一个直方图,那么就是元组 (n, bins, patches)n为频数/频率;bins为直方图的各个分界点;patches为每个直方图。
    • 如果绘制多个直方图,那么就是元组 ([n0, n1, ...], bins, [patches0, patches1,...])

    参数为:

    • x:一个序列或者一维数组,给定了直方图的数据
    • bins:一个整数。返回了bins+1个分界点,将竖着划分成等分的bins份。你可以传递一个序列,指定分界点,此时可以实现非等分的划分。
    • range:一个元组,给出了数据的上界和下界,在这之外的数据不被考虑。默认就是(x.min(),x.max())
    • normed:布尔值,如果为True,则返回的是数据出现的频率;否则返回的是数据出现的频数
    • weights:长度与x相同的序列,给出了每个数据的权重
    • cumulative :布尔值。如果为True,则计算的是累积频率/频数
    • bottom:一个整数或者整数序列或者None,指定了直方图底部的纵坐标。默认为 0
    • histtype:直方图的类型。可以为'bar'/'barstacked'/'step'/'stepfilled'
    • align:直方图每个小矩形的对齐方式。可以为'left'/'mid'/right'
    • orientation:调整方向。可以为'horizontal'/'vertical'。如果为水平则,使用barh,同时bottom参数设定的是左侧的横坐标值
    • rwidth:一个标量值,设定了直方图每个矩形的相对于默认值的宽度。如果直方图类型为 step/stepfilled,则忽略该参数。
    • log:布尔值。如果为True:则x轴使用对数坐标
    • color:颜色或者颜色序列,用于给直方图指定颜色
    • label:字符串或者字符串序列。给直方图指定标签
    • stacked:一个布尔值。如果为True,则多个直方图会叠加在一起。
    • 其他参数设置了Patch的属性

    hist hist

  33. hist2d(x, y, bins=10, range=None, normed=False, weights=None, cmin=None, cmax=None, **kwargs):绘制二维直方图。其返回值为元组 (counts, xedges, yedges, Image)

    参数为:

    • x:一个序列或者一维数组,给定了x坐标序列

    • y:一个序列或者一维数组,给定了y坐标序列

    • bins

      • 如果为整数,则给出了两个维度上的区间数量
      • 如果为int,int序列,则分别给出了x区间数量和y区间数量
      • 如果给定了一个一维数组,则给出了 x_edges=y_edges=bins
      • 如果为定了array,array,则分别给出了x_edges,y_edges
    • range:一个(2,2)的数组,给出了数据的上界和下界,在这之外的数据不被考虑。默认就是(x.min(),x.max())

    • normed:布尔值,如果为True,则返回的是数据出现的频率;否则返回的是数据出现的频数

    • weights:长度与x相同的序列,给出了每个数据的权重

    • cmin:一个标量值。那些count值小于cmin的单元不被显示。同时返回的结果中,这些单元返回nan

    • cmax:一个标量值。那些count值大于cmax的单元不被显示。同时返回的结果中,这些单元返回nan

    • 其他参数设置了pcolorfast()属性

    hist2d

  34. hlines(y, xmin, xmax, colors='k', linestyles='solid', label='', **kwargs):从xminxmax绘制一系列的水平线。这些水平线的纵坐标由y提供。

    • y:水平线的纵坐标。如果为标量,则为一条水平;如果为序列,则为一系列水平线。数据坐标系
    • xmin/xmax:水平线的起点和终点的横坐标。如果是个标量,则所有的水平线公用。如果是序列,则每个水平线设置一个。数据坐标系
    • linestyles:指定线型。可以为一个字符串(所有水平线公用),或者字符串序列(每个水平线一个)。线型在'solid' | 'dashed' | 'dashdot' | 'dotted'四者之一
    • colors:指定颜色。可以为一个颜色(所有水平线公用),或者颜色序列(每个水平线一个)。
    • label:一个字符串,指定标签。
    • 其他关键字参数设置LineCollection属性。

    hlines

  35. imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, **kwargs):绘制图片。返回一个AxesImage对象

    • X:包含了图片的数据。其形状可以为:

      • (n,m)(灰度图),类型为float
      • (n,m,3)RGB图),类型为float(此时每个元素的值都在 0 和 1.0 之间),或者unit8
      • (n,m,4)RGBA图),类型为float(此时每个元素的值都在 0 和 1.0 之间),或者unit8
    • cmap:一个Colormap实例。默认由rcimage.cmap指定。如果XRGB/RGBA,则忽略该参数

    • aspect:一个字符串,指定图片的缩放。可以为:

      • 'auto':缩放图片的宽高比,是的它匹配axes
      • 'equal':当extent参数为None时,修改axes的宽高比,使得它匹配图片;如果extent参数不是None,则修改axes的宽高比来匹配extent
      • None:默认由rcimage.aspect指定
    • interpolation:一个字符串,指定插值方式。可以为'none', 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos'

    • norm:一个Normalize实例,用于将图片亮度正则化到 0~1。如果为None,则采用normalize.norm

    • vmin/vmax:用于辅助norm进行正则化。如果你传入了一个norm实例,则该参数忽略

    • alpha:浮点数,指定透明度

    • origin:可以为'upper'/'lower'。图片的第一个像素X[0,0]放置在坐标原点。

      • 'upper':横坐标向右,纵坐标向下
      • 'lower':横坐标向右,纵坐标向上
    • extent:一个元组(left, right, bottom, top),等价于同时使用了set_xlim(left,right)+set_ylim(bottom,top)

    • shape:一个元组(column,rows),用于rar buffer image

    • filternorm/filterrad:用于过滤

    • 其他参数用于调整 Artist属性

    imshow imshow

  36. legend(*args, **kwargs):创建一个图例。

    • 最简单的方式:你首先创建一个Axes,然后在其中添加lines,然后直接调用ax.legend()即可。此时那些label非空的线将被图例注释

    • 你也可以采用下面面向对象的方案:线创建line,然后调用line.set_label(),然后调用ax.legend()。此时的逻辑更清晰

    • 如果你不想让某个line被图例注释,则它的label要么为空字符串,要么为以下划线开始。

    • 还有一种直接控制图例的方式:它直接显式指定了被注释的line和对应的label

      关键字参数:

    • loc:指定了图例的位置。可以为整数或者字符串。可以是字符串'best'/'upper right'/'upper left' /'lower left'/'lower right'/'right'/'center left'/'center right' /'lower center'/'upper center'/'center',对应于整数的 0~10。你也可以指定坐标(x,y),其中(0,0)是左下角,(1,1)是右上角

    • ncol:一个整数,指定图例中有几列,默认为 1列

    • prop:一个字典,或者FontProperties实例,可以指定图例中的字体属性。

    • fontsize:控制字体大小,可以为整数、浮点数(指定字体绝对大小),或者字符串 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'

    • numpoint/scatterpoints:图例上每个图例线的点数

    • fancybox:如果为True,图例的边框采用圆角矩形

    • framealpha:一个浮点数,从0到 1,图例的透明度

    • frameon:一个布尔值,如果为True,则绘制图例的背景框。否则不绘制。

    • shadow:如果为True,图例添加背影

    • ncol:列数

    • title:图例的标题

    legend legend

  37. locator_params(axis='both', tight=None, **kwargs):控制tick locator

    • axis:一个字符串,指定控制那个轴。可以为'x'/'y'/'both'
    • tight:一个布尔值。它传递给autoscale_view()
    • 其他关键字参数传递给set_params()方法

    如果你想调整主轴上的刻度线的数量,可以使用ax.locator_params(tight=True,nbins=4)

    locator_params

  38. loglog(*args, **kwargs):绘制line,但是将x轴和y轴都调整为对数坐标

    • x:数据的x坐标
    • y:数据的y坐标
    • basex/basey:一个大于 1 的标量,控制对数的底数
    • subsx/subsy:一个序列,给出了x/y轴的子刻度的位置(数据坐标系)。默认为None,此时子刻度是自动划分的
    • nonposx/nonposy:如果为'mask',则x/y的负数或者零将被视作无效的数;如果为'clip',则x/y的负数或者零将被视作一个非常小的正数(因为对数的自变量要大于零)
    • 剩下的参数将被作为Line2D的属性
  39. margins(*args, **kw):设置Axesmargin。你可以通过ax.margins()获取当前的margin。 你也可以通过ax.margins(x=xmargin,y=ymargin)来设置margin。这两个参数的值是 0~1 margins

  40. matshow(Z, **kwargs):将一个矩阵绘制成图片。

    • Z:一个形状为(n,m)的数组
    • 其他参数见imshow

    matshow

  41. minorticks_off():关闭次刻度线。minorticks_on():打开次刻度线。

  42. pcolor(*args, **kwargs):绘制一个pseudocolor plot,返回一个Collection实例。对于大型数组,它很慢,此时推荐使用pcolormesh()

    常用的方式为: pcolor(C,*kwargs),此时C为一个二维数组。也可以指定pcolor(X,Y,C,*kwargs)X/Y/C都是二维数组,并且XY的尺寸比C大。它将在四个点决定的矩形中填充颜色C[i,j](X[i, j], Y[i, j])(X[i, j+1], Y[i, j+1])(X[i+1, j], Y[i+1, j])(X[i+1, j+1], Y[i+1, j+1])X/Y也可以是一维的,但是首先会进行广播法则。

    关键字参数为:

    • cmap:一个Colormap实例。如果为None,则使用rc的设置
    • edgecolorsNone或者'none'或者一个颜色或者一个颜色序列。用于设定边的颜色
    • 其他参数设置PopyCollection属性

    pcolor

  43. pcolorfast(*args, **kwargs):用法和pcolor相同,它是一个实验性质的,提供了一个更快的实现。

  44. pcolormesh(*args, **kwargs):作用和pcolor相同。但是它是另一个实现方式,并且返回不同的对象,它返回的是QuadMesh对象。它的速度更快。其参数和用法与pcolor相同。

    • edgecolors:除了pcoloredgecolors之外,还多了一个'face',表示使用与四边形背景色相同的颜色。

    pcolormesh

  45. pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False):绘制饼状图。

    • x:数据序列。每一块饼的权重为x/sum(x);如果sum(x)<=1,则x已经代表了每一块饼的权重,此时并不会除以sum(x)。饼状图从x轴开始,逆时针绘制。
    • explode:如果不是None,则它给出了每个饼的径向偏移量。该偏移量表示:径向偏移除以半径。
    • colors:给出了每一块饼的颜色。可以为None或者颜色序列
    • labels:给出了每个饼的字符串标签。可以为None或者字符串序列
    • autopct:它可以为一个字符串,可以指定每个饼的数值标签,但是该字符串是 fmt%pct,通过pct参数格式化,pct为饼的比重(自动提供)。也可以是一个可调用对象。
    • pctdistance:若autopctNone,则忽略之。否则就是数值标签的径向距离,它是个相对距离,相对于半径。
    • labeldistance:控制了饼的字符串标签的径向距离,它是个相对距离,相对于半径。
    • shadow:一个布尔值,如果为True,则绘制带阴影的饼状图
    • startangle:如果不是None,则它可控制了第一块饼与x轴的夹角
    • radius:一个标量,控制了饼状图的半径。如果为None,则默认为 1
    • counterclock:一个布尔值。如果为True,则为逆时针方向;否则为顺时针排列
    • wedgeprops:一个字典,控制了每一块饼的某些属性,如线型
    • textprops:一个字典,控制了饼的文字的一些属性
    • center:一个二元的元组,指定了饼状图的中心
    • frame:一个布尔值,控制是否绘制axes frame(也就是背后的数轴)。发现版本1.5.3中,开启它是个Bug,图形混乱。

    为了显示好看,建议使用ax.set_aspect(1)Axes的长宽比设置为 1, 此时的饼状图是个圆形(否则为椭圆)。

    pie pie

  46. plot(*args, **kwargs):绘制line或者marker。他返回line的列表。

    最简单的用法是:plot(x,y),其中x为数据点的横坐标,y为数据点的纵坐标。此时采用默认的线型和颜色。

    • 你也可以设置线型和颜色为 plot(x,y,'bo')'b'代表颜色为蓝色,'o'代表使用小圆圈标记数据点。'bo'称作plot format string
    • 你也可以省略xplot(y)。此时隐含着x等于[0,1,...len(y-1)]
    • 如果x/y为二维数组,那么每一行作为一组line来绘制
    • 如果你想一次绘制多条线,可以用plot(x1,y1,'b+',x2,y2,'b-',x3,y3,'bo')

    控制marker的字符串可以为:'-'/'--'/'-.'/':'/'.'/','/'o'/'v'/'^'/'<'/'>'/'1'/'2'/'3'/'4'/ 's'/'p'/'*'/'h'/'H'/'+'/'x'/'D'/'d'/'|'/'_'

    控制颜色的字符串可以为: 'b'/'g'/'r'/'c'/'m'/'y'/'k'/'w';你也可以指定它们的全名,如'red';或者指定十六进制字符串'#00ff00;或者指定一个RGB/RGBA元组: (0,1,0)/(0,1,0,1)

    默认情况下,不同的线采用不同的线型,它由rcaxes.prop_cycle参数控制,并且是循环使用。这些参数都可以单独地作为关键字参数来设置。如果一个plot绘制了多条线,则其参数对所有的线起作用。这些关键字全部用于设定Line2D的属性。

    plot plot

  47. plot_date(x, y, fmt='o', tz=None, xdate=True, ydate=False, **kwargs):绘制日期相关的数据。它类似于plot()方法,但是plot_datax轴或者y轴可能是日期相关的数据。

    • x/y:待绘制的点的坐标序列。如果是日期序列,则代表了从 0001-01-01 UTC以来的天数(浮点数)(它映射到整数 1)。日期必须大于等于 0(1代表第一天),且日期跨度大于一个月(31天)
    • fmtplot format string,如bo
    • tz:指定时区。可以为时区字符串,也可以为tzinfo实例或者None
    • xdate:一个布尔值。如果为True,则x轴为时间序列
    • ydate:一个布尔值。如果为True,则y轴为时间序列
    • 其他参数用于设定Line2D的属性

    注意:plot_date()使用默认的dates.AutoDateLocator/dates.AutoDateFormatter。如果你希望使用自定义的,则你需要在调用plot_date()之后调用方法来设置date ticker/date formatter

    设置时区:

    设置日期格式化和位置:

    • ax.xaxis.set_major_locator()设置x轴的主刻度的locator
    • ax.xaxis.set_major_formatter()设置x轴的主刻度的formatter
    • DateFormatter:初始化字符串的解释与strftime()相同
    • 常见的一些DateLocator有:MinuteLocatorHourLocatorDayLocatorWeekdayLocatorMonthLocatorYearLocatorAutoDateLocator

    plot_date

  48. properties():返回一个字典,该字典中包含了axes中的所有属性的键值对。

  49. quiver(*args, **kw):创建一个二维的场向量。

    常见的调用方式有: quiver(U,V,**kw)quiver(U,V,C,**kw)quiver(X,Y,U,V,C,**kw)quiver(X,Y,U,V,C,**kw)。其中 U/V为向量的x轴分量和y轴分量。X/Y为绘制向量的起点坐标。C用于指定每个箭头的颜色。

    • 如果为指定X/Y,则默认每个向量的起点从每个单元格生成。

    关键字参数有:

    • units:一个字符串,指定箭头的单位。除了箭头的长度以外,其他的度量都是以该单位为准。可以为:

      • 'width'/'height':以axes的宽度/高度为单位
      • 'dots'/'inches':以像素点/英寸为单位
      • 'x'/'y'/'xy':以数据坐标系下的X/Y为单位,而xy'表示数据坐标系下的单位矩形的对角线为单位。
    • angles:指定向量的角度。正方形可能因为X/Y轴缩放尺度不同而显示为长方形。可以为'uv',表示只采用U,V的值计算;可以为'xy',表示角度计算时考虑X轴与Y轴的缩放尺度。

    • scale:一个浮点数,决定缩放比例。它和scale_units决定了箭头的全长。假如向量的长度计算得到为 10,那么假如scale为 2, 而scale_unitsdots,那么该向量的长度为5像素点。

    • scale_units:一个字符串,指定缩放比例的单位。可以为'width'/'height'/'dots'/'inches'/'x'/'y'/'xy'

    • width:一个标量,指定箭头的宽度,单位由units参数指定

    • headwitdh:一个标量,指定箭头的头部的宽度,单位由units参数指定

    • headlength:一个标量,指定箭头的头部的长度,单位由units参数指定

    • headaxislength:一个标量,指定的是箭头的头部的左半边小三角与箭杆的相交的长度。单位由units参数指定

    • minshaft:一个标量,Length below which arrow scales, in units of head length. 。不要设置成小于 1,否则图形很难看

    • minlength:一个标量,指定所有箭头的最短长度(单位由units参数指定)。如果有的箭头长度小于它,则绘制成一个点。

    • pivot:一个字符串,控制了箭头旋转的中心。可以为'tail'/'mid'/'middle'/'tip'tip表示箭头的尖尖。

    • color:给出了箭头的颜色。如果给出了C参数,则该参数被忽略。

    • 其他参数控制了PolyCollection的属性

    quiver

  50. quiverkey(*args, **kw):给quiver设置key。常用的调用方式为:quiverkey(Q,X,Y,U,label,**kw)

    • Q:一个Quiver实例,由quiver()返回

    • X/Ykey放置的位置,都是标量

    • Ukey的长度,都是标量

    • label:一个字符串,指定了标记。

    • coordinates:一个字符串,指定了X/Y的坐标系。

      • 'axes'axes坐标系,(0,0)axes的左下角,(1,1)axes的右上角。
      • 'figure'figure坐标系,(0,0)figure的左下角,(1,1)figure的右上角。
      • 'data'data坐标系
      • 'inches':为figure坐标系,但是以像素点为基准。(0,0)为左下角
    • color:重写了Qcolor

    • labelpos:放置标记的位置,可以为'N'/'S'/'E'/'W'

    • labelsep:给出了标记和箭头的距离,单位为英寸

    • labelcolor:给出了标记的颜色

    • fontproperties:一个字典或者FontProperties实例,设置了标记的字体。

    • 其他的关键字参数用于重写quiver的一些属性。

    quiverkey

  51. remove():从figure中移除本axes。除非重绘figure,否则看不出来效果。

  52. scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, **kwargs):绘制散点图。返回一个PathCollection实例。

    • x/y:数据的x坐标和y坐标,要求它们形状为(n,)

    • s:指定散点的尺寸,可以为标量,也可以为一个长度为n的序列

    • c:指定散点的颜色。可以为一个颜色,或者颜色序列

    • marker:指定散点的类型,默认为'o'。可以为'.',',','o','v','^','<','>','1','2','3','4','s','p', '*','h','H','+','x','D','d','|','_','None',None,' ','','$...$'之一。也可以为一个Path实例。也可以是一个元组(numsided,style,angle)

      • numsided指定了边的数量
      • style:可以为0(正多边形);1(星星状的符号);2(一个*);3(一个圆,此时numsided,angle被忽略)
      • angle:指定了散点旋转的角度(按照角度制而不是弧度制)
    • cmap:设定一个colormap。可以是Colormap实例,或者它的名字。只有当c参数为一列浮点数时,有效

    • norm:一个Normalize实例,用于将亮度调整到0~1

    • vmin,vmax:一个标量,用于辅助默认的norm调整亮度(如果你传入了一个Normalize实例给norm,则该参数忽略)

    • alpha:一个标量,设置透明度

    • linewidths:一个标量或者序列,设置线宽

    • edgecolors:设定边线的颜色,可以为一个颜色,或者颜色序列

    • 其他参数用于设定Collection参数

    scatter

  53. semilogx(*args, **kwargs):它类似plot(),只是将x轴设置为对数坐标。除了多了下面的参数外,其他设置与plot()一样。

    • basex:一个大于 1 的标量,用于设置对数的底数
    • subx:一个序列或者None。用于设置x轴的主要刻度值。默认采用自动设定
    • nonposx:如果为'mask',则x的负数或者零将被视作无效的数;如果为'clip',则x的负数或者零将被视作一个非常小的正数(因为对数的自变量要大于零)
  54. semilogy(*args, **kwargs):它类似plot(),只是将y轴设置为对数坐标。除了多了下面的参数外,其他设置与plot()一样。

    • basey:一个大于 1 的标量,用于设置对数的底数
    • suby:一个序列或者None。用于设置y轴的主要刻度值。默认采用自动设定
    • nonposy:如果为'mask',则y的负数或者零将被视作无效的数;如果为'clip',则y的负数或者零将被视作一个非常小的正数(因为对数的自变量要大于零)
      loglog
  55. spy(Z, precision=0, marker=None, markersize=None, aspect='equal', origin='upper', **kwargs):绘制矩阵中的非零值。

    • Z:待绘制的二维矩阵,它和precision决定了绘制区域。坐标点(i,j)对应于Z[j,i],即列对应于x轴。
    • precision:只有Z中的那些大于precision的值才被绘制
    • marker:用它来表示Z中的非零值
    • markersizemarker的大小。
    • aspect:高宽比
    • origin:参考imshoworigin spy
  56. stem(*args, **kwargs):绘制stem图。其调用方式为:

    stem

  57. step(x, y, *args, **kwargs):绘制阶梯图。调用方式为step(x, y, *args, **kwargs)

    • x/y:都是一维序列,并且假设x为单调递增的(如果不满足,也不报错)
    • where:指定分步类型。可以为'pre'/'post'/'mid'
    • 其他参数与plot()相同

    step

  58. streamplot(x, y, u, v, density=1, linewidth=None, color=None, cmap=None, norm=None, arrowsize=1, arrowstyle='-|>', minlength=0.1, transform=None, zorder=1, start_points=None):绘制向量场流线。

    • x/y:一维数组,给出了网格的坐标
    • u/v:二维数组,给出了每个网格的向量。其行数等于y的长度,列数等于x的长度
    • density:一个浮点数或者浮点数的二元元组。控制了绘制向量场的密度。
    • linewidth:标量或者二维数组,给出了每个向量箭头的线宽
    • color:标量或者二维数组,给出了每个向量箭头的颜色
    • cmap:一个Colormap实例。当color是一个二维数组时,它配合使用,给出了每个向量箭头的颜色
    • norm:一个Normalize实例。当color是一个二维数组时,它配合使用,将颜色亮度调整为0~1
    • arrowsize:一个浮点数,给出了箭头缩放比例
    • arrowstyle:一个字符串,给出了箭头的类型。
    • minlength:一个浮点数,限定了最小的向量长度
    • start_points:它是一个N*2的数组,N流线起点的个数,给出了流线起始点的位置

    streamplot

  59. table(**kwargs):添加一个表格,返回一个table.Table实例。调用方式为:

  60. text(x, y, s, fontdict=None, withdash=False, **kwargs):添加文本,返回一个Text实例。

    • s:一个字符串,被添加的文本
    • x/y:一个标量,文本被添加的坐标
    • fontdict:一个字典,给出了字体属性。
    • withdash:一个布尔值。如果为True,则创建一个TextWithDash实例而不是Text实例。
    • 其他参数用于控制Text属性
  61. tick_params(axis='both', **kwargs):控制ticktick label

    • axis:一个字符串,指定要控制那个轴。可以为'x'/'y'/'both'
    • reset:一个布尔值。如果为True,那么在进行处理其他关键字参数之前,先恢复默认值。默认为False
    • which:一个字符串,指定控制主刻度还是次刻度。可以为'major'/'minor'/'both'
    • direction:一个字符串,控制将刻度放置在axes里面还是外面。可以为'in'/'out'/'inout'
    • length:一个标量值。给出了每个刻度线的长度(就是那个小竖线),单位为像素点
    • width:一个标量值。给出了每个刻度线的宽度(就是那个小竖线),单位为像素点
    • color:给出刻度线的颜色
    • pad:一个标量值,给出了刻度线和刻度label之间的距离,单位为像素点
    • labelsize:一个标量值,给出了刻度label的字体大小。可以为数值,单位为像素点。也可以为字符串,如large'
    • labelcolor:给出了刻度label的颜色
    • colors:同时调整刻度线的颜色和刻度label的颜色
    • bottom/top/left/right:一个布尔值或者字符串'on'/'off'。控制是否绘制对应位置的刻度线
    • labelbottom/labeltop/labelleft/labelright:一个布尔值或者字符串'on'/'off'。控制是否绘制对应位置的刻度label
  62. vlines(x, ymin, ymax, colors='k', linestyles='solid', label='', **kwargs):绘制一群垂直线。

    • x:标量或者一维数组,给出了垂线的位置
    • ymin/ymax:给出了垂线的起始和终止位置。如果是个标量,则所有垂线共享该值
    • colors:给出垂线的颜色
    • linestyles:给出了垂线的线型
    • label:一个字符串
    • 其他关键字参数设置LineCollection参数
  63. xcorr(x, y, normed=True, detrend=<function detrend_none>, usevlines=True, maxlags=10, **kwargs):绘制互相关图。参数解释参考acorr()自相关函数。

c. Axis类

  1. matplotlib.axis.Axis实例处理tick linegrid linetick label以及axis label的绘制,它包括坐标轴上的刻度线、刻度label、坐标网格、坐标轴标题。通常你可以独立的配置y轴的左边刻度以及右边的刻度,也可以独立地配置x轴的上边刻度以及下边的刻度。

    • 刻度包括主刻度和次刻度,它们都是Tick刻度对象。
  2. Axis也存储了数据用于内部的缩放以及自适应处理。它还有Locator实例和Formatter实例用于控制刻度线的位置以及刻度label

  3. 每个Axis都有一个.label属性,也有主刻度列表和次刻度列表。这些tickXTickYTick的实例,他们存放着实际的line primitive以及text primitive来渲染刻度线以及刻度文本。

  4. 刻度是动态创建的,只有在需要创建的时候才创建(比如缩放的时候)。Axis也提供了一些辅助方法来获取刻度文本、刻度线位置等等:

    • Axis.get_major_ticks():获取主刻度列表(一个Tick对象的列表)

    • Axis.get_minor_ticks():获取次刻度列表(一个Tick对象的列表)

    • Axis.get_majorticklabels():获取主刻度label列表(一个Text对象的列表)

    • Axis.get_majorticklines():获取主刻度线(一个Line2D对象的列表)

    • Axis.get_ticklocs():获取刻度线位置的列表。 可以通过minor=True|False关键字参数控制输出minor还是majortick location

    • Axis.get_ticklabels():获取刻度label列表(一个Text实例的列表)。 可以通过minor=True|False关键字参数控制输出minor还是majortick label

    • Axis.get_ticklines():获取刻度线列表(一个Line2D实例的列表)。 可以通过minor=True|False关键字参数控制输出minor还是majortick line

    • Axis.get_scale():获取坐标轴的缩放属性,如'log'或者'linear'

    • Axis.get_view_interval():获取内部的axis view limits实例

    • Axis.get_data_interval():获取内部的axis data limits实例

    • Axis.get_gridlines():获取grid line的列表

    • Axis.get_label():获取axis label(一个Text实例)

    • Axis.get_label_text():获取axis label的字符串

    • Axis.get_major_locator():获取major tick locator(一个matplotlib.ticker.Locator实例)

    • Axis.get_minor_locator():获取minor tick locator(一个matplotlib.ticker.Locator实例)

    • Axis.get_major_formatter():获取major tick formatter(一个matplotlib.ticker.Formatter实例)

    • Axis.get_minor_formatter():获取minor tick formatter(一个matplotlib.ticker.Formatter实例)

    • Axis.grid(b=None,which='major',**kwargs):一个开关,用于控制major或者minortickon|off

      Axis tick

  5. Axis 方法

    • axis_date(tz=None):将x轴视作时间轴
    • cla():清除axis
    • get_xxx()方法:参考前面叙述的内容
    • set_xxx()方法:对应的设置方法。
  6. 获取刻度线或者刻度label之后,可以设置其各种属性,如可以对刻度label旋转 30度:

d. Tick类

  1. matplotlib.axis.Tick类是从Figure-->Axes-->Tick这个container体系中最末端的containerTick容纳了tickgrid line以及tick对应的label。所有的这些都可以通过Tick的属性获取:

    • Tick.tick1line:一个Line2D实例
    • Tick.tick2line:一个Line2D实例
    • Tick.gridline:一个Line2D实例
    • Tick.label1:一个Text实例
    • Tick.label2:一个Text实例
    • Tick.gridOn:一个布尔值,决定了是否绘制tickline
    • Tick.tick1On:一个布尔值,决定了是否绘制1st tickline
    • Tick.tick2On:一个布尔值,决定了是否绘制2nd tickline
    • Tick.label1On:一个布尔值,决定了是否绘制1st tick label
    • Tick.label2On:一个布尔值,决定了是否绘制2nd tick label

    y轴分为左右两个,因此tick1*对应左侧的轴;tick2*对应右侧的轴。 x轴分为上下两个,因此tick1*对应下侧的轴;tick2*对应上侧的轴。

    Tick

  2. 方法有:

    • get_loc():以标量的形式返回Tick的坐标
    • get_pad():返回Ticklabel和刻度线之间的距离(单位为像素点)
    • set_label(s)/set_label1(s)/set_label2(s):设置label
    • set_pad(val):设置Ticklabel和刻度线之间的距离(单位为像素点)

2. primitive

a. Line2D类

  1. matplotlib.lines.Line2D类是matplotlib中的曲线类(基类是matplotlib.artist.Artist),它可以有各种各样的颜色、类型、以及标注等等。它的构造函数为:

    这些关键字参数都是Line2D的属性。其属性有:

b. Text类

  1. matplotlib.text.Text类是绘制文字的类(基类是matplotlib.artist.Artist)。它的构造函数为:

    这些关键字参数也是属性。其属性有:

c. Annotation类

  1. matplotlib.text.Annotation类是图表中的图式,它是一个带箭头的文本框,用于解说图表中的图形。它的基类是matplotlib.text.Textmatplotlib.text._AnnotationBase。其构造函数为:

    在位置xytext处放置一个文本框,该文本框用于解释点xy,文本框的文本为s

d. Legend

  1. matplotlib.legend.Legend是图例类,它的基类是matplotlib.artist.Artist。其构造函数为:

    其关键字参数为:

属性为:

e. Patch类

  1. matplotlib.patches.Patch类是二维图形类。它的基类是matplotlib.artist.Artist。其构造函数为:

    参数为:

如果 edgecolor, facecolor, linewidth, or antialiasedNone则这些值从rc params中读取

属性如下:

f. Rectangle 类

  1. matplotlib.patches.Rectangle类是矩形类(基类是matplotlib.patches.Patch),其构造函数为:Rectangle(xy,width,height,angle=0.0,**kwargs)。 参数为:

    • xy:矩形左下角坐标
    • width:矩形宽度
    • height:矩形高度
    • 其他关键字参数用于设置属性

    其属性有:

    • 继承自Artist基类的属性: .alpha.animated.axes.clip_box、..clip_on.clip_path.contains.figure.gid.label.picker.transform.url.visible.zorder
    • 继承自Patch基类的属性: .antialiased或者.aa.capstyle.color.edgecolor或者.ec.facecolor或者.fc.fill.hatch.joinstyle.linestyle或者.ls.linewidth或者.lw属性

g. Polygon类

  1. matplotlib.patches.Polygon类是多边形类。其基类是matplotlib.patches.Patch。其构造函数为: Polygon(xy, closed=True, **kwargs)。参数为:

    • xy是一个N×2numpy array,为多边形的顶点。
    • closedTrue则指定多边形将起点和终点重合从而显式关闭多边形。
    • 其他关键字参数用于设置属性

    Polygon的属性有:

    • 继承自Artist基类的属性: .alpha.animated.axes.clip_box、..clip_on.clip_path.contains.figure.gid.label.picker.transform.url.visible.zorder
    • 继承自Patch基类的属性: .antialiased或者.aa.capstyle.color.edgecolor或者.ec.facecolor或者.fc.fill.hatch.joinstyle.linestyle或者.ls.linewidth或者.lw属性

h. PolyCollection类

  1. matplotlib.collections.PolyCollection是多边形集合类,其基类是matplotlib.collections._CollectionWithSizes。它的构造函数为: PolyCollection(verts, sizes=None, closed=True, **kwargs)

    其关键字参数为:

    • verts:一个顶点序列。每个顶点都由xy元组或者xy数组组成
    • sizes:一个浮点数序列,依次指定每个顶点正方形的边长。如果序列长度小于顶点长度,则循环从序列头部再开始 挑选
    • closed:如果为True,则显式封闭多边形
    • edgecolors: collection的边的颜色
    • 其他关键字参数用于设置属性

    下面为属性:

    • 继承自Artist基类的属性: .alpha.animated.axes.clip_box、..clip_on.clip_path.contains.figure.gid.label.picker.transform.url.visible.zorder
    • .facecolors: collection的前景色
    • .linewidths: collection的边线宽
    • .antialiaseds:抗锯齿属性,可以为True或者False
    • .offsets: 设置collection的偏移
    • .norm: 归一化对象
    • .cmap:color map

三、基本概念

  1. matplotlib被划分为不同的层次:

    • matplotlib.pyplot模块:位于matplotlib的顶层,它是一个state-machine environment。该模块中的很多函数是用于给当前Figure的当前Axes添加plot element,比如linetextimage等。它非常类似于Matlab的用法。
    • 下一层是面向对象的接口:在这一层pyplot只是用部分函数来创建Figure,然后通过该Figure显式的创建Axes,然后通过面向对象的接口在该Axes上添加图形。极端情况下用户可以完全抛弃pyplot而完全使用面向对象的接口。

    对于非交互式绘图,官方文档推荐用pyplot创建Figure,然后使用面向对象接口来绘图。

  2. matplotlib的所有plotting function期待输入numpy.array或者numpy.ma.masked_array类型的数据作为输入。某些长得像numpy.array的数据比如numpy.matrix类型的输入数据可能会导致matplotlib工作异常。如果确实需要使用numpy.matrix,你应该首先将它转换为numpy.array

  3. matplotlib 、 pyplot 、 pylab 的关系:

    • matplotlib:它是整个package
    • matplotlib.pyplot:是matplotlib的一个module。它为底层的面向对象接口提供了一个state-machine interface。这个state-machine必要的时候隐式创建FigureAxes,并维护current Figurecurrent Axes
    • pylab是一个便利的module,它导入了matplotlib.pyplot以及numpy,它只是为了plot以及math方便而用。官方文档不推荐使用它。

    pyplot.gcf():获取当前的figure对象。pyplot.gca():获取当前的Axes对象

  4. 代码风格:官方文档不推荐 MATLAB风格的代码。因为MATLAB风格代码维护了全局状态,你执行同一个plot多次可能会发现结果是不同的。官方文档推荐使用如下风格:

    这样的风格使得在绘图事件中,每个角色都很清楚,数据的流动也很清楚。

1. backend

  1. matplotlib可以适用于非常广泛的场景:

    • matplotlib可以交互式地用于python shell
    • matplotlib可以嵌入到wxpython或者pygtkGUI程序中
    • matplotlib可以在脚本中使用从而生成postscript image

    为了适应于这些场景,matplotlib针对这些target生成不同的输出格式。这种能力称之为backend

    与之相对的frontend指的是用户使用matplotlib而编写的代码

  2. 有两种类型的backend

    • 交互式的backend:应用于pygtkwxpythontkinterqt4macosx等中
    • 非交互式的backend:用于生成image file(如PNG、SVG、PDF、PS等格式文件,这些backend的名字暗示了要存储的文件的格式)
  3. 有多种方法来设置backend,其中后面提到的方法会覆盖前面的方法设置的backend

    • matplotlibrc配置文件中设置的backend参数,如backend: WXAgg #使use wxpython with antigrain(agg) rendering
    • 设置MPLBACKEND环境变量,无论是在shell中设置还是在脚本中设置。
    • 对单个脚本设置backend时,可以直接在python命令后添加-d命令(这种方法不推荐,deprecated
    • 在脚本中使用特定的backend时,可以用matplotlib.use('PDF')命令。这条语句必须在import matplotlib.pyplot语句之前执行。如果在import matplotlib.pyplot之后执行use语句,则没有任何效果。通常建议避免使用use()方法,因为使用该脚本的人无法修改backend了。
    • 设定backend时,是忽略大小写的。因此GTKAgg也等价于gtkagg
    • 查看当前的backend可以用:matplotlib.get_backend()
  4. rendering engine :matplotlib提供的常用的rendering engineAgg,它采用的是Anti-Grain Geometry C++ library。除了macosx之外的所有user interface都可以用agg rendering,如WXAgg,GTKAgg,QT4Agg,TkAgg这些backend

    某些user interface还支持其他引擎,如GTK支持Cario引擎,如GTKCariro backend

    下面是所有的Rendering engine

    • AGG:输出png格式文件。它可以输出高质量的图形
    • PS:输出ps\eps格式文件。它是Postscript output
    • PDF:输出pdf格式文件。
    • SVG:输出svg格式文件
    • Cairo:可以输出png、ps、pdf、svg...等格式文件
    • GDK:可以输出png、jpg、tiff...等格式文件,它使用Gimp Drawing Kit

    要想保存成指定类型文件,如PDF,那么首先要设置合适的backend

2. 交互式模式

  1. 使用交互式backend可以plotting to the screen,但是前提是matplotlib必须是interactive mode

    你可以在matplotlibrc配置文件中设置matplotlib是否位于交互模式,也可以通过代码matplotlib.interacite()来设置matplotlib位于交互模式。你可以通过代码matplotlib.is_interactive()来判断代码是否交互模式。通常并不建议在绘图过程中修改交互模式,因此要提前修改交互模式再绘图。

    交互模式也可以通过matplotlib.pyplot.ion()开启交互模式,由matplotlib.pyplot.ioff()关闭交互模式。另外交互模式支持ipythonpython shell,但是不支持IDLE IDE

    交互模式

  2. 在交互模式下:

    • pyplot.plot()绘图之后图表马上显示,pyplot自动绘制到屏幕,不需要调用pyplot.show()
    • 图表显式之后你可以继续输入命令。任何对图形的修改会实时的反应到图表中去。
    • 使用面向对象的方法,如Axes的方法并不会自动调用draw_if_interactive()。如果你通过Axes来修改图表,想更新图表的话那么你需要手动调用.draw()方法。而pyplot模块中的函数会主动调用draw_if_interactive(),因此如果你是通过pyplot模块修改图表那么不需要手动调用.draw()方法就是实时绘制。
  3. 在非交互模式下:

    • 在绘图之后必须手动调用pyplot.show()才能显示图表。该函数会阻塞执行直到你关闭了图表窗口。
    • 所有的绘制工作会延迟到pyplot.show()函数调用
    • 在1.0版本以前,单个脚本文件中只能调用一次pyplot.show(),在1.01版本之后该限制被放松。

3. matplotlib的颜色

  1. 可以通过matplotlib.pyplot.colors()方法获取matplotlib支持的所有颜色。该方法不做任何事情,就是提供一个帮助文档。

  2. matplotlib提供了下面颜色的别名:'b':蓝色;'g':绿色;'r':红色;'y':黄色;'c':青色;'k':黑色;'m':洋红色;'w':白色。

  3. 你也可以定制自己的颜色。有两种方法:

    • 使用HTML十六进制字符串:如'#eeefff'
    • 使用HTML颜色名字:如'red'
    • 使用一个归一化到闭区间[0-1]的RGB元组:如color=(0.3,0.3,0.4)

4. matplotlib.cm

  1. matplotlib.cm模块包含了一系列的colormap,以及相关的函数。它主要有两个函数:

    • matplotlib.cm.get_cmap(name=None, lut=None):获取一个colormap实例。其中:

      • name:指定了colormap的名字。如果为None,则使用rc配置。如果它已经是colormap实例,则直接返回该实例。注意:register_cmap注册的colormap优先查询
      • lut:一个整数。如果非None,则指定了查询表的number of entries
    • matplotlib.cm.register_cmap(name=None, cmap=None, data=None, lut=None):注册一个colormap。有两种使用方式:

      • register_cmap(name='swirly', cmap=swirly_cmap):此时cmap参数必须是matplotlib.colors.Colormap实例。name默认为该Colormap实例的.name属性。
      • register_cmap(name='choppy', data=choppydata, lut=128):此时这三个参数传递给matplotlib.colors.LinearSegementedColormap初始化函数。

    所有的内置的name如下:

    你可以使用cm.get_cmap('winter')来使用,也可以直接用cm.winter来使用。

    cm0 cm1 cm2 cm3 cm4 cm5 cm6

5. matplotlib.colors

  1. matplotlib.colors是一个模块,用于转换数字或者颜色参数到 RGB 或者RGBA

    • RGB:一个浮点数元组,有3个浮点数。每个数都是 0-1之间
    • RGBA:一个浮点数元组,有4个浮点数。每个数都是 0-1之间
  2. colors.cnames是个字典,它给出了常用颜色的字符串和对应的#FFFFFF形式。 cnames

  3. colors.rgb2hex(rgb)函数:给出了rgb元组到#FFFFFF形式。 而hex2color(s)给出了#FFFFFFrgb形式。 rgb_hex

  4. colors.ColorConverter类是个颜色转换器类。它提供了下面方法用于转换颜色:

    • .to_rgb(arg):转换其他类型的颜色到标准的rgb三元组。其中arg可以为一个rgb/rgba序列,或者一个字符串,字符串格式为:

      • 一个代表颜色的字符,如'rgbcmykw'
      • 一个十六进制的颜色字符串,如'#0FFFFFF'
      • 一个标准的颜色的名字,如'red'
      • 一个代表浮点数的字符串,如'0.5'
    • .to_rgba(arg, alpha=None):转换其他类型的颜色到标准的rgba四元组

    • to_rgba_array(c, alpha=None):它返回一个ndarray,而不是一个元组

    colors.colorConverter是模块提供的一个默认的实例。 colorConverter

  5. colors.Colormap是所有colormap的基类。colormap用于将[0,1]之间的浮点数转换为RGBA颜色。

    它是一个颜色条,浮点数对应了颜色条的位置(归一化为0.0~1.0),RGBA颜色对应了指定颜色条某个位置处的颜色。

    其属性有:

    • namecolormap名字
    • N:一个整数,表示rgb颜色层级,默认为256级

    常用方法有:

    • __call__(self, X, alpha=None, bytes=False):颜色转换。

      • X为一个标量或者ndarray,给出了待转换的数据。如果是浮点数,则必须是[0.0,1.0]之间。如果是整数,则必须是[0,self.N)之间。如果是标量,则返回rgba四元组。如果是ndarray,则返回一个ndarray,相当于对每个元素进行标量转换,然后组装成ndarray
      • alpha:一个浮点数,给出了透明度。必须是0到1之间
      • bytes:一个布尔值。如果为True,则返回的结果是[0,255]之间。否则是[0.0,1.0]之间
  6. colors.LinearSegmentColormap(Colormap):是Colormap的子类。

    额外的属性: ._gamma/._segmentdata

    • 它的构造函数为:__init__(self, name, segmentdata, N=256, gamma=1.0)。其中segmentdata是一个字典,字典的键分别为'red'/'green'/'blue',字典的值为一个列表,列表元素为三元组(alpha被忽略)。如:

      每一行代表了元组(x,y0,y1)。其中red/green/blue中,每一列x必须从0递增到1;y0/y1也是如此。对于任何落到x[i]~x[i+1]之间的值z,其映射的颜色由y1[i]y0[i+1]插值决定。

    • 类方法 from_list(name, colors, N=256, gamma=1.0):从一个颜色序列中构造LinearSegmentColormap。其中colors是一个颜色序列,matplotlib会将颜色均匀分布,val=0处对应colors[0]val=1处对应colors[-1]。你也可以传递一个(value,color)元组的序列,其中value指定了对应位置处的color,其中value位于[0.0,1.0]

    LinearSegmentColormap0 LinearSegmentColormap1

  7. colors.ListedColormap(Colormap)Colormap的子类。它用于从一个list of colors中创建colormap

    • 构造方法为:__init__(self, colors, name=’from_list’, N=None)。其中color是一个颜色列表。或者为一个浮点数ndarray,其形状为Nx3或者Nx4Ncolormap的条目数,如果N <len(colors),则截断colors。如果N > len(colors),则重复colors到指定长度。

    ListedColormap

  8. colors.Normalize:是归一化类。它用于将数据归一化到[0.0,1.0]

    • 构造方法为: __init__(self, vmin=None, vmax=None, clip=False)。如果未提供vmin/vmax,则使用数据的最小值和最大值。如果clip=True,则落在vmin~vmax之外的数据被截断为0或者1。如果vmin==vmax,则始终返回 0
    • 属性有: .vmin/.vmax/.clip
    • 类方法为: process_value(value):调整value的格式,从而方便后续的操作
    • 实例方法: __call__(self, value, clip=None):归一化处理
    • 实例方法: inverse(self, value):逆归一化处理

    Normalize

  9. colors.LogNorm类是Normalize的子类,它使用对数来归一化

  10. colors.rgb_to_hsv(arr):将rgb形式的浮点数数组转换为hsv格式的浮点数组。而hsv_to_rgb(hsv)执行的是逆向操作。

6. matplotlib.colorbar

  1. matplotlib.colorbar模块包含了创建colorbar的一些方法和类。

    • ColorbarBase:绘制colorbar的基类
    • Colorbar:用于imges/contour等的colorbar
    • make_axes():用于调整Axes并向其中添加一个colorbar
  2. matplotlib.colorbar.Colorbar(ax, mappable, **kw)Colorbar类。通常没必要显式调用构造函数,而应该调用下面两个方式:

    • Figure.colorbar(mappable, cax=None, ax=None, use_gridspec=True, **kw)
    • pyplot.colorbar(mappable=None, cax=None, ax=None, **kw)

    参数为:

    • mappable:为Image/ContourSet对象。它是你将要应用colorbar的对象
    • cax:它指定了你将在哪个Axes内绘制colorbar
    • ax:你的新的colorbar Axes从该ax中拿到绘制空间。
    • use_gridspec:一个布尔值。如果cax=None,则如果use_gridspec=True,则创建一个Subplot对象。如果为False,则创建一个Axes对象。

    额外的参数参与设置两个对象:

    • axes对象:

      • orientation :设置为垂直'vertical'还是水平'horizontal'
      • fraction :一个浮点数,指定从原始的Axes中窃取多少倍的空间来绘制colorbar 。默认为 0.15
      • pad :0.05 if vertical, 0.15 if horizontal; 一个浮点数,指定两个Axes的间距
      • shrink : 指定colorbar的伸缩比。默认为 1.0
      • aspect :指定colorbar的长宽比。默认为 20
    • colorbar对象:

      • extend:一个字符串。可以为'neither'/'both'/'min'/'max'。如果不是'neither',则它会在colorbar对应端添加箭头(如果extendrect=False
      • extendfraccolorbar指示超出部分的箭头的长度。
      • extendrect:一个布尔值。如果为True,则超出部分不用箭头。
      • drawedges:一个布尔值,如果为True,则绘制colorbar的边。
      • ticks:给出你要显示哪些tick
      • format:指定格式化方式。可以为格式化字符串如%.3f,或者Formatter对象。

    colorbar colorbar

四、布局

1. 简单布局

  1. 简单布局通过Figure.add_subplot(*args,**kwargs)方法来完成,它返回的是Axes实例。当然你也可以通过pyplot.subplot(*args,**kwargs)函数来完成,他返回的也是Axes实例,该函数只是一个便利函数。

SubPlot类是Axes类的子类。因此SubPlot对象也是Axes对象。

  1. 最典型用法是matplotlib.pyplot.subplot(nrows,ncols,plot_number)nrowsncols将图表划分成nrows*ncols大小的网格区域,每一个区域都能存放一个SubPlot;该函数创建plot_number位置处的SubPlot-axes。其中plot_number起始于1,最大值为nrows*ncols

    如果nrowsncolsplot_number都是个位数,则你可以指定一个三位数来简化函数调用matplotlib.pyplot.subplot(integer),其中百分位代表nrows,十分位代表ncols,各位代表plot_number

  2. add_subplot其他的参数:

    • axisbg关键字参数:指定subplot的背景色
    • polar关键字参数:指定subplot是否是极坐标。默认为False
    • projection:指定坐标方式,可以为:'aitoff''hammer''lambert''mollweide''polar''rectilinear'。当projection='polar'等价于ploar=True
    • sharex关键字参数:指定subplot与其他Axes(由该参数值指定)共享xaxis attribute
    • sharey关键字参数:指定subplot是否与其他Axes(由该参数值指定)共享yaxis attribute
  3. 你可以通过pyplot.subplots()函数一次性的创建多个SubPlot

    pyplot.subplot()每次只会创建一个SubPlot

    pyplot.subplots

    其参数有:

    • nrows:行数,默认为1

    • ncols:列数,默认为1

    • sharex

      • 如果为True,则所有SubPlotX axis被共享。此时只有最后一行的X轴可见。
      • 如果为False,则SubPlotX axis不共享,每一个SbuPlotX轴可见。
      • 如果为字符串all,则等效于True
      • 如果为字符串none,则当小于False
      • 如果为字符串row,则每一行的SubPlot共享一个X轴(与False等效)
      • 如果为字符串col,则每一列的SubPlot共享一个X轴(与True等效)

      pyplot.subplots(sharex=True)

      pyplot.subplots(sharex='row')

      pyplot.subplots(sharex='col')

    • sharey

      • 如果为True,则所有SubPlotY axis被共享。此时只有第一列的Y轴可见。
      • 如果为False,则SubPlotY axis不共享,每一个SbuPlotY轴可见。
      • 如果为字符串all,则等效于True
      • 如果为字符串none,则当小于False
      • 如果为字符串row,则每一行的SubPlot共享一个Y轴(与True等效)
      • 如果为字符串col,则每一列的SubPlot共享一个Y轴(与False等效)
    • squeeze

      • 如果为True

        • 如果只创建了一个SubPlot,则返回一个变量(创建的SubPlot对象)
        • 如果创建了N*1或者1*NSubPlot,则返回一个1维向量
        • 如果创建了N*MSubPlot(其中N>1,M>1),则返回一个2维向量
      • 如果为False则始终返回一个2维向量

    • subplot_kw:一个字典参数,用于传递给Axes.add_subplot()来创建SubPlot

    • gridspec_kw:一个字典参数,用于传递给GridSpec构造函数来创建SubPlot存放的网格

    • fig_kw:一个字典参数,用于传递给pyplot.figure()函数。所有前述未能识别的感激案子参数都会传到这里。

    其返回值为figure,ax。其中figure是一个Figure对象;ax取决于squeeze参数。

2. 使用 pyplot.subplot2grid() 函数

  1. 使用pyplot.subplot2grid()函数时,你只需要提供网格形状以及SubPlot位置即可,如: ax=pyplot.subplot2grid((2,2),(0,0)),它等价于ax=pyplot.subplot(2,2,1)。其中subplot2grid()的位置坐标从0开始。

  2. subplot2grid()支持SubPlot横跨或者纵跨多个单元格。colspan关键字参数指定纵向的跨度;rowspanguan尖子参数指定横向的跨度。

    pyplot.subplot2grid()

3. 使用 GridSpec 和 SubplotSpec

  1. 你可以直接创建matplotlib.gridspec.GridSpec然后通过它来创建SubPlot。如:

    等价于matplotlib.pyplot.subplot2grid((2,2),(0,0))

  2. GridSpec对对象提供了类似array的索引方法,其索引的结果是一个SubplotSpec对象实例。如果你想创建横跨多个网格的SubplotSpec,那么你需要对GridSpec对象执行分片索引,如pyplot.subplot(gs[0,:-1])

    使用`GridSpec`和`SubplotSpec`

  3. 如果你使用GridSpec,那么你可以调整由GridSpec创建的SubplotSpeclayout parameter。如:

    这种用法类似于subplots_adjust,但是它仅仅影响由本GridSpec创建的SubplotSpec。其中gs.update()的关键字参数有:

  1. 你可以从SubplotSpec创建GridSpec。此时layout parameter由该SubplotSpec指定。如:

    创建一个GridSpec,它的subplot layout parameter继承自指定的SubplotSpec。 其中nrows为网格行数,ncols为网格列数,subplot_spec为指定的SubplotSpec

从`SubplotSpec`创建`GridSpec`

  1. 默认情况下,GridSpec创建的网格都是相同大小的。当然你可以调整相对的高度和宽度。注意这里只有相对大小(即比例)是有意义的,绝对大小值是没有意义的。如:

    这里width_ratios关键字参数指定了一行中,各列的宽度比例(有多少列就有多少个数字); height_ratios关键字参数指定了一列中,各行的高度比例(有多少行就有多少个数字)。

    不同大小的`GridSpec`网格

  2. GridSpec.tight_layout()

    GridSpec.tight_layout(fig, renderer=None, pad=1.08, h_pad=None, w_pad=None,rect=None): tight_layout能够自动调整subplot param从而使得subplot适应figure area。 它仅仅检查ticklabel、axis label、title等内容是否超出绘制区域。其参数为:

    • fig关键字参数:Figure对象,图表。
    • pad关键字参数:一个浮点数,单位是fontsize,表示figure edgeedges of subplots之间的 填充区域。
    • h_pad关键字参数:一个浮点数,单位是fontsize,示subplots之间的高度,默认为pad
    • w_pad关键字参数:一个浮点数,单位是fontsize,示subplots之间的宽度,默认为pad
    • rect关键字参数:如果给定了该参数为一个列表或元组(是一个矩形的四要素,分别代表左下角坐标,宽度,高度),则指定了网格的轮廓矩形,所有的subplots都位于该矩形中。其坐标系是figure coordinate,从[0...1],如果没有提供该参数,则默认为(0, 0, 1, 1)

    当然你可以使用matplotlib.pyplot.tight_layout()来达到同样的效果。

    `GridSpec.tight_layout()`

五、 Path

  1. matplotlib.patch对象底层的对象就是Path。它的基本用法如下:

    `Path`

  2. PATH对象的创建通过matplotlib.path.Path(verts,codes)创建,其中:

    • vertsPATH的顶点。这些顶点必须构成一个封闭曲线。其中每个顶点必须指定x坐标和y坐标。

    • codes:指示如何使用这些PATH顶点。它与verts关系是一一对应的。有如下指令:

      • Path.STOP:结束path的标记
      • Path.MOVETO:画笔提起并移动到指定的顶点
      • Path.LINETO:画笔画直线,从current position到指定的顶点
      • Path.CURVE3:画笔画二阶贝塞尔曲线,从current position到指定的end point, 其中还有一个参数是指定的control point
      • Path.CURVE4:画笔画三阶贝塞尔曲线,从current position到指定的end point, 其中还有两个参数是指定的control points
      • Path.CLOSEPOLY:指定的point参数被忽略。该指令画一条线段, 从current pointstart point

    可以通过matplotlib.patches.PathPatch(path)来构建一个PathPatch对象,然后通过Axes.add_patch(patch)Axes添加PathPatch对象.这样就添加了Path到图表中。

    贝塞尔曲线

  3. matplotlib中所有简单的patch primitive,如RectangleCirclePolygon等等,都是由简单的Path来实现的。而创建大量的primitive的函数如hist()bar()(他们创建了大量的Rectanle)可以使用一个compound path来高效地实现。

    但是实际上bar()创建的是一系列的Rectangle,而没有用到compound path,这是由于历史原因,是历史遗留问题。(bar()函数先于Coupound Path出现)

    下面是一个Compound Path的例子:

    在创建Axes或者SubPlot时,可以给构造函数提供一个axisbg参数来指定背景色

六、 path effect

  1. matplotlibpatheffects模块提供了一些函数来绘制path effect,该模块还定义了很多effect类。可以应用path effectArtist有:PatchLine2DCollection以及Text。每个Artistpath effect可以通过.set_path_effects()方法控制,其参数是一个可迭代对象,迭代的结果是AbstractPathEffect实例;也可以通过Artist构造函数的path_effects=关键字参数控制。

    注意:effect类的关键字参数比如背景色、前景色等与Artist不同。因为这些effect类是更低层次的操作。

  2. 所有的effect类都继承自matplotlib.patheffects.AbstractPathEffect类。AbstractPathEffect的子类要覆盖AbstractPathEffect类的.draw_path(...)方法。

    AbstractPathEffect类的构造函数有个offset关键字参数,表示effect偏移(默认为(0,0))

  3. 最简单的effectnormal effect,它是matplotlib.patheffects.Normal类。它简单的绘制Artist,不带任何effect

    如:

    `normal effect`

  4. 我们可以在基于PathArtist上应用drop-shadow effect(下沉效果)。如可以在filled patch Artist上应用matplotlib.patheffects.SimplePatchShadow,在line patch Artist上应用matplotlib.patheffects.SimpleLineShadow

    `drop-shadow effect`

    你可以通过path_effects=[path_effects.with*()]来指定path_effects参数,或者直接通过path_effects=[path_effects.SimpleLineShadow(),path_effects.Normal()]来指定path_effects参数。

    • 前者会自动地在normal effect后跟随指定的effect
    • 后者会显式的指定effect
  5. Strok effect可以用于制作出stand-out effect(突出效果)。

    `stand-out effect`

  6. PathPatchEffect是一个通用的path effect类。如果对某个PathPatch设置了PathPatchEffect,则该effect.draw_path(...)方法执行的是由初始PathPatch计算的得到的一个新的PathPatch

    与一般的effect类不同,PathPatchEffect类的关键字参数是与PathPatch一致的,因为除了offset关键字参数外,其他的任何关键字参数都会传递给PathPatch构造函数。如:

    `PathPatchEffect`

七、坐标变换

  1. matplotlib中有四个坐标系:

    • 用户级的data坐标系:坐标转换对象为ax.transData。它是用户级坐标系,由xlimylim控制
    • Axes坐标系:坐标转换对象为ax.transAxes。它是Axes的坐标系,(0,0)Axes的左下角,(1,1)Axes的右上角。
    • Figure坐标系:坐标转换对象为fig.transFigure。它是Figure的坐标系,(0,0)Figure的左下角,(1,1)Figure的右上角。
    • display坐标系:它没有坐标转换对象。它显示的是display的像素坐标系,(0,0)display的左下角,(width,height)display的右上角。

    前面三个坐标系的坐标转换对象有方法执行坐标转换,这些方法接受输入并产生输出:输入为本坐标系内的坐标点,输出为display坐标系中的坐标。(因此display坐标系没有坐标转换对象)。当然他们也有相关方法将来自于display坐标系中的坐标转换回本坐标系内的坐标。

  2. Artist的构造函数中传入transform关键字参数(其值为坐标转换对象),就能够切换坐标系。如:ax.text(0.05,0.95,label,"This is a Text",transform=ax.transAxes),将Text放置于Axes坐标系中的(0.05,0.95)位置处。

    通常不建议直接使用display坐标系。因为它固定了绝对坐标,导致你resize图表时你必须重新定位坐标。所以你必须监听resize事件,非常麻烦。

1. 用户的 data 坐标系

  1. 当调用ax.set_xlimit(x_min,x_max)以及ax.set_ylimit(y_min,y_max)时,即建立起了用户data坐标系。左下角坐标为(x_min,y_min),右上角坐标为(x_max,y_max)

    有时候你可能并没有显式调用.set_xlimit()以及.set_ylimit()。其实matplotlib会隐式调用它们来设置坐标轴的数据范围。

  2. 你可以调用ax.transData返回data坐标系的坐标转换对象。对该坐标转换对象调用.transform(point)方法会返回pointdisplay坐标系下的坐标。其中point是点在data坐标系下的坐标(x,y)。你也可以给.transform()方法一次传入多个点的坐标,此时输出也是对应于display坐标系下的一系列坐标。

  3. 你可以对ax.trandData返回的坐标转换对象调用.inverted()方法。该方法返回的是一个坐标逆转换对象。对该坐标逆转换对象调用.transform(point)方法会返回pointdata坐标系下的坐标。其中point是点在display坐标系下的坐标(x,y)。你也可以给.transform()方法一次传入多个点的坐标,此时输出也是对应于data坐标系下的一系列坐标。

  4. 当你调用了ax.set_xlim()或者ax.set_ylim()时,坐标转换对象会实时更新。

    用户的`data`坐标系

2. Axes 坐标系

  1. Axes坐标系中,(0,0)位于Axes的左下角,(1,1)位于Axes的右上角,(0.5,0.5)位于Axes的中心。当然你可以引用位于这之外的点,如(-0.1,1.1)
  2. 通常如果你需要在Axes中放置一些文字说明,那么一般都是采用Axes坐标系来定位。这样无论图形怎么缩放,这些Text都能位于正确的位置。
  3. 你也可以在Axes中通过Axes坐标系添加一些Patch,但是通常建议在data坐标系下添加。因为你在Axes中添加的图表当图表缩放时可能会出现问题。

3. 混合坐标系

  1. 有时候你需要混合data坐标系和Axes坐标系。通过matplotlib.transforms.blended_transform_factory(ax.transData, ax.transAxes) 能够返回一个混合坐标系,该坐标系中:x坐标为data坐标系,y坐标为Axes坐标系。因此该坐标系中(1,1)表示的是data坐标系中x=1但是y位于最上方的点。

    混合坐标系

  2. 有两个函数返回特定的混合坐标系:

    • matplotlib.axes.Axes.get_xaxis_transform():等价于 matplotlib.transforms.blended_transform_factory(ax.transData, ax.transAxes)x坐标为data坐标系,y坐标为Axes坐标系。常用于绘制x轴的labeltickgridline
    • matplotlib.axes.Axes.get_yaxis_transform().:等价于 matplotlib.transforms.blended_transform_factory(ax.transAxes,ax.transData)x坐标为Axes坐标系,y坐标为data坐标系。常用于绘制y轴的labeltickgridline

4. 利用坐标变换制造阴影效果

  1. matplotlib.transform.ScaledTranslation(xt, yt, scale_trans)创建一个新的坐标转换对象,该坐标转换由xtyt经过scale_trans坐标转换而来。

    它创建的是一个偏移对于的坐标变换。偏移的坐标是位于scale_trans中的。

    • 制作阴影的时候,将阴影的zorder调小,从而使得阴影首先绘制并位于底层

    • scale_transfig.dpi_scale_trans坐标转换对象时,xt,yt的单位是像素。还有一个方法也能达到同样的效果:matplotlib.transforms.offset_copy(trans,x=xt,y=yt,units='inches'),但是该方法返回的坐标转换对象是trans合成了偏移之后的效果。

      制造阴影效果

5. 直角坐标系、对数坐标系、极坐标系

  1. 通过Axes.set_xscale(value,**kwargs)/Axes.set_yscale(value,**kwargs)方法可以设置x轴/y轴是否对数坐标。其中value可以为:

    • linear:线性
    • log:对数。其中basex|basey关键字指定对数的基
    • logit:以2为底的对数
    • symlog:对数,其中basex|basey关键字指定对数的基

    你也可以通过matplotlib.pyplot.xscale()matplotlib.pyplot.yscale()来设置对数坐标。一定要先添加数据后设置对数坐标。

    对数坐标

  2. 通过Figure.add_axes((left,bottom,width,height), projection='polar')或者Figure.add_axes((left,bottom,width,height), polar=True)方法可以创建一个极坐标的Axes。其中polar关键字是为了兼容旧代码,新代码推荐用projection关键字,因为projection关键字不仅可以设置极坐标,还可以设置自定义坐标(它将坐标统一为映射关系)。

    Figure.add_subplot(...)也是同样的设置

    级坐标

八、 3D 绘图

  1. 3D绘图与2D绘图的调用方法几乎相同,除了增加一个 projection='3d'的关键字参数。

    3d_new_style

  2. 绘制直线:Axes3D.plot(xs, ys, *args, **kwargs)。其参数为:

    • xs,ys:点的 x,y坐标
    • zs:点的z坐标。该值可以是一个标量(表示对所有点都取同一个值);也可以是个数组或列表,表示每个点一个值
    • zdir:指定那个是z轴。其值可以是'x'或者'y'或者'z'
    • 剩下的关键字参数与Axes.plot()相同
  3. 绘制散点图:Axes3D.scatter(xs, ys, zs=0, zdir=’z’, s=20, c=’b’, depthshade=True, *args, **kwargs)。其参数为:

    • xs,ys:点的 x,y坐标
    • zs:点的z坐标。该值可以是一个标量(表示对所有点都取同一个值);也可以是个数组或列表,表示每个点一个值
    • zdir:指定那个是z轴。其值可以是'x'或者'y'或者'z'
    • s:散点的大小(单位为 point^2).该值可以是一个标量(表示对所有点都取同一个值);也可以是个数组或列表,表示每个点一个值
    • c:散点的颜色。你可以将它设为一个颜色字符串,表示所有的点都是一个颜色。或者是个 cmap,指定颜色图
    • depthshade:一个布尔值。如果为True,则通过对marker设置阴影来展示层次关系
    • 剩下的关键字参数与Axes.scatter()相同
  4. 绘制线框:Axes3D.plot_wireframe(X, Y, Z, *args, **kwargs)。其参数为:

    • X,Y:点的 x,y坐标
    • Z:点的z坐标。该值可以是一个标量(表示对所有点都取同一个值);也可以是个数组或列表,表示每个点一个值
    • rstride:行的步长
    • cstride:列的步长
    • 剩下的关键字传递给LineCollection

九、技巧

1. 共享坐标轴

  1. 当你通过pyplot.subplot()pyplot.axes()函数或者Figure.add_subplot()Figure.add_axes()方法创建一个Axes时,你可以通过sharex关键字参数传入另一个Axes表示共享X轴;或者通过sharey关键字参数传入另一个Axes表示共享Y轴。

    共享轴线时,当你缩放某个Axes时,另一个Axes也跟着缩放。

    共享坐标轴

2. 创建多个 subplot

  1. 如果你想创建网格中的许多subplot,旧式风格的代码非常繁琐:

    新式风格的代码直接利用pyplot.subplots()函数一次性创建:

它创建了Figure和对应所有网格SubPlot。你也可以不去解包而直接:

返回的axs是一个nrows*ncolsarray,支持numpy的索引。

3. 调整日期显示

  1. x轴为时间日期时,有可能间隔太密集导致显示都叠加在一起。此时可以用matplotlib.figure.Figure.autofmt_xdate()函数来自动调整X轴日期的显式。

    你也可以调整X轴的显示格式。当X轴为时间时,其显示由Axes.fmt_xdata属性来提供。该属性是一个函数对象或者函数,接受一个日期参数,返回该日期的显示字符串。matplotlib已经提供了许多date formatter,你可以直接使用ax.fmt_xdata=matplotlib.dates.DateFormatter('%Y-%m-%d')

    日期显示

4. 放置 text box

  1. 当你在Axes中放置text box时,你最好将它放置在axes coordinates下,这样当你调整X轴或者Y轴时,它能够自动调整位置。

    你也可以使用Text.bbox属性来让这个Text始终放在某个Patch中。其中.bbox是个字典,它存放的是该Patch实例的属性。

    text_box

5. LATEX文字

  1. 要想在文本中使用LATEX,你需要使用'$...$'这种字符串(即使用'$'作为界定符)。通常建议使用raw字符串,即r'$...$'的格式,因为原生字符串不会转义'\',从而使得大量的LATEX词法能够正确解析。

6. 平移坐标轴:

  1. Axes.spines是个字典,它存放了四个键,分别为: Axes.spines['left],Axes.spines['right],Axes.spines['top],Axes.spines['bottom] 他们都是一个matplotlib.spines.Spine对象,该对象继承自matplotlib.patches.Patch对象,主要是设置图形边界的边框。

    • Spine.set_color('none'):不显示这条边线

    • Spine.set_position((position)):将边线移动到指定坐标,其中position是一个二元元组,指定了 (position type,amount)position type可以是:

      • outward:在绘图区域之外放置边线,离开绘图区域的距离由 amount指定(负值则在会去区域内绘制)
      • axes:在 Axes coordinate内放置边线(从 0.0 到 1.0 )
      • data:在 data coordinate 内放置边线

      你也可以指定position为 : 'center',等价于 ('axes',0.5);或者 'zero',等价于 ('data',0.0) move_axis

7. 清除绘图

  1. 你可以通过 pyplot来清除绘图:

    • pyplot.cla():清除current axis。非当前axis不受影响
    • pyplot.clf():清除current figure。但是它不关闭window
    • pyplot.close():关闭window
  2. 你也可以通过面向对象的方法:

    • Figure.clf():清除该Figure对象的所有内容。

8. 清除X坐标和Y坐标:

9. 设置中文

linux 下,为了支持中文,则在开头设置: