通常,一个图表(figure)上一次需要绘制多个图表域(Axes),一般排版成一个规则的网格。随着Matplotlib库的不断地被完善,逐渐形成了有多种用于处理图表域网格的工具。在这里,我们将讨论我们认为用户最常用的工具,这些工具支持如何排版图表域,并提及一些较旧的工具。
备注:
Matplotlib使用图表域来表示包含数据、x轴和y轴、刻度、标签、标题等的绘图区域。有关详细信息,请参见图表的部分(Parts of a Figure)。另一个经常使用的术语是“子绘图(subplot)”,它也是图表域对象,不过特指网格中的图表域。
概述
创建网格状组合的图表域
subplots
用于创建图表和图表域网格的主要功能。它一次性创建并放置在图表上的所有图表域,并返回一个对象数组,其中包含网格中的图表域的控制句柄。见Figure.subplots。
或
subplot_mosaic
创建图表和图表域网格的简单方法,增加了图表域的灵活性,可以跨行或列。返回的这些图表域是带标签的字典而不是数组。另请参见Figure.subplot_mosaic和复杂和语义图表组合(Complex and semantic figure composition)。
有时,很自然会有多组不同的图表域网格,在这种情况下,Matplotlib使用子图表(SubFigure)概念:
SubFigure
图表中的虚拟图表。
基础工具
上面提到的这些功能的基础是网格规格(GridSpec)和子网格规格(SubplotSpec)概念:
GridSpec
指定要放置子绘图的栅格的几何图形。需要设定网格的行数和列数。可选地,可以调整子绘图布局参数(例如,left、right等)。
SubplotSpec
指定给定GridSpec中子绘图的位置。
一次添加单个图表域
上述函数在单个函数调用中创建所有图表域。也可以一次添加一个图表域,这是Matplotlib最初的工作方式。这样做通常不怎么优雅和灵活,但有时对交互式工作或在自定义位置放置图表域很有用:
add_axes
在列表[left,bottom,width,height](每个数值都是图表宽度或高度的分数)指定的位置添加单个图表域。
subplot或Figure.add_subplot
使用基于1的索引(从Matlab继承而来)在图表上添加单个子绘图。通过指定网格单元格的范围,可以跨越列和行。
subplot2grid
类似于pyplot.subplot,但使用基于0的索引和二维Python切片来选择单元格。
Parts of a Figure:
https://matplotlib.org/stable/tutorials/introductory/quick_start.html#figure-parts
subplots:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html#matplotlib.pyplot.subplots
Figure.subplots:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.subplots
subplot_mosaic:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot_mosaic.html#matplotlib.pyplot.subplot_mosaic
Figure.subplot_mosaic:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.subplot_mosaic
Complex and semantic figure composition:
https://matplotlib.org/stable/tutorials/provisional/mosaic.html
SubFigure:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.SubFigure
GridSpec:
https://matplotlib.org/stable/api/_as_gen/matplotlib.gridspec.GridSpec.html#matplotlib.gridspec.GridSpec
SubplotSpec:
https://matplotlib.org/stable/api/_as_gen/matplotlib.gridspec.SubplotSpec.html#matplotlib.gridspec.SubplotSpec
add_axes:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_axes
subplot:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot
subplot:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot
Figure.add_subplot:
https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_subplot
subplot2grid:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot2grid.html#matplotlib.pyplot.subplot2grid
pyplot.subplot:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot