自定义布局

matplotlib的gridspaec模块是专门指定画布中子图位置的模块,该模块中包含一个GridSpec类,通过显示地创建GridSpec类对象来自定义画布中子图的布局结构,使得子图能够更好地适应画布。GridSpec类的结构方法的语法格式如下:

GridSpec(nrows,ncols,figure=None,left=None,bottom=None,right=None,top=None,
wspace=None,hspace=None,width_ratios=None,height_ratios=None)

该方法常用的参数含义如下:

nrows:表示行数

ncols:表示列数

figure:表示布局的画布

left,bottom,right,top:表示子图的范围

wspace:表示子图之间预留的宽度量

hspace:表示子图之间预留的高度量

  GridSpec类对象的使用方式与数组的使用方式相似,采用索引或切片的形式访问每一个布局的元素。此外,matplotlib中的Figure对象的提供了快速添加布局结构的方法add_gridspec()。

(1)使用GridSpec()方法创建子图的布局结构

先分别创建figure和GridSpec实例,然后将 gridspec 实例的元素传递给 add_subplot() 方法以创建轴对象。

gridspec元素的访问方式与 numpy 数组相同。


import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
 
fig2 = plt.figure(constrained_layout=True)
spec2 = gridspec.GridSpec(ncols=2, nrows=2, figure=fig2)
f2_ax1 = fig2.add_subplot(spec2[0, 0])
f2_ax2 = fig2.add_subplot(spec2[0, 1])
f2_ax3 = fig2.add_subplot(spec2[1, 0])
f2_ax4 = fig2.add_subplot(spec2[1, 1])
plt.show()

运行结果:

gridspec 的强大之处在于能够创建跨行和列的子图。注意用于选择每个子图将占据的gridspec部分的 Numpy 切片语法。

我们也可以使用 Figure.add_gridspec方法创建不同宽度的子图:

import matplotlib.pyplot as plt
 
fig3 = plt.figure(constrained_layout=True)
gs = fig3.add_gridspec(3, 3)
f3_ax1 = fig3.add_subplot(gs[0, :])
f3_ax1.set_title('gs[0, :]')
f3_ax2 = fig3.add_subplot(gs[1, :-1])
f3_ax2.set_title('gs[1, :-1]')
f3_ax3 = fig3.add_subplot(gs[1:, -1])
f3_ax3.set_title('gs[1:, -1]')
f3_ax4 = fig3.add_subplot(gs[-1, 0])
f3_ax4.set_title('gs[-1, 0]')
f3_ax5 = fig3.add_subplot(gs[-1, -2])
f3_ax5.set_title('gs[-1, -2]')
plt.show()

运行结果:

而后我们利用自定义布局的GridSpec实例,在画布上创建如图所示的坐标系实例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
#创建画布实例
fig3=plt.figure()
#创建“区域规划图”实例
spec3 =gridspec.GridSpec(3, 4,figure=fig3)
#根据给定的“区域规划图”,创建对应的坐标系实例
ax1= plt.subplot(spec3[0,0:4])
ax2= plt.subplot(spec3[1,0:2])
ax3= plt.subplot(spec3[1,2:4])
ax4= plt.subplot(spec3[2,0:1])
plt.subplot(349,polar=True)
ax5= plt.subplot(spec3[2,1:4])
#调整子图的位置
plt.tight_layout()

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值