使用 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])
。
a. 调整 GridSpec layout
如果你使用 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
之间的空白的高度
b. 从 SubplotSpec 创建 GridSpec :
你可以从 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
。
c. 创建不同大小的 GridSpec 网格
默认情况下, GridSpec
创建的网格都是相同大小的。当然你可以调整相对的高度和宽度。注意这里只有相对大小(即比例)是有意义的,绝对大小值是没有意义的。如:
gs=gridspec.GridSpec(2,2,width_ratios=[1,2],height_ratios=[4,1]
plt.subplot(gs[0]
....
这里 width_ratios
关键字参数指定了一行中,各列的宽度比例(有多少列就有多少个数字); height_ratios
关键字参数指定了一列中,各行的高度比例(有多少行就有多少个数字)。
d. 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()
来达到同样的效果。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论