3. 使用 GridSpec 和 SubplotSpec
你可以直接创建
matplotlib.gridspec.GridSpec
然后通过它来创建SubPlot
。如:gs=matplotlib.gridspec.GridSpec(2,2) #网格2行2列
matplotlib.pyplot.subplot(gs[0,0])
等价于
matplotlib.pyplot.subplot2grid((2,2),(0,0))
GridSpec
对对象提供了类似array
的索引方法,其索引的结果是一个SubplotSpec
对象实例。如果你想创建横跨多个网格的SubplotSpec
,那么你需要对GridSpec
对象执行分片索引,如pyplot.subplot(gs[0,:-1])
。如果你使用
GridSpec
,那么你可以调整由GridSpec
创建的SubplotSpec
的layout parameter
。如:gs=gridspec.GridSpec(3,3)
gs.update(left=0.05,right=0.48,wspace=0.05)
这种用法类似于
subplots_adjust
,但是它仅仅影响由本GridSpec
创建的SubplotSpec
。其中gs.update()
的关键字参数有:
left
关键字参数:subplot
左侧宽度right
关键字参数:subplot
右侧宽度bottom
关键字参数:subplot
底部高度top
关键字参数:subplot
顶部高度wspace
关键字参数:subplot
之间的空白宽度hspace
关键字参数:subplot
之间的空白的高度
你可以从
SubplotSpec
创建GridSpec
。此时layout parameter
由该SubplotSpec
指定。如:gs0=gridspec.GridSpec(1,2)
gs00=gridspec.GridSpecFromSubplotSpec(3,3,subplot_spec=gs0[0])
matplotlib.gridspec.GridSpecFromSubplotSpec(nrows, ncols, subplot_spec,
wspace=None, hspace=None,height_ratios=None,width_ratios=None)
创建一个
GridSpec
,它的subplot layout parameter
继承自指定的SubplotSpec
。 其中nrows
为网格行数,ncols
为网格列数,subplot_spec
为指定的SubplotSpec
。
默认情况下,
GridSpec
创建的网格都是相同大小的。当然你可以调整相对的高度和宽度。注意这里只有相对大小(即比例)是有意义的,绝对大小值是没有意义的。如:gs=gridspec.GridSpec(2,2,width_ratios=[1,2],height_ratios=[4,1]
plt.subplot(gs[0]
....
这里
width_ratios
关键字参数指定了一行中,各列的宽度比例(有多少列就有多少个数字);height_ratios
关键字参数指定了一列中,各行的高度比例(有多少行就有多少个数字)。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 edge
和edges 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()
来达到同样的效果。