GridSpec的具体使用(自定义布局)

GridSpec: 

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

GridSpec类的构造方法的语法格式如下:

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

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

                        ✔️ncols : 表示列数

                        ✔️nrows : 表示行数
                        ✔️figure : 表示布局的画布

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

                        ✔️left, bottom,right,top : 表示子图的范围
                        ✔️hspace : 表示子图之间预留的高度量

GridSpec类对象的使用方式与数组的使用方式相似,采用索引或切片的形式访问每个布局元素。此外,matplotlib中还为Figure对象提供了快速添加布局结构的方法add_gridspec()。下面分别使用两种方式创建自定义的布局结构。


(1)使用GridSpec()方法创建子图的布局结构
这种方式需要创建子图和GridSpec类对象,之后在调用add_subplot()方法时传入 GridSpec类对象即可。

具体示例如下:

导入所需库与plt绘图模式

%matplotlib auto
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

Jupyter Notebook 默认输出的图片是静态的,无法进行放大等操作,可以添加指令:

%matplotlib auto

这样就能够在notebook中进行放大缩小等交互操作了。 

在notebook中使用plt绘图共有三种模式:

  • %matplotlib inline:这是默认的模式,输出的图片是静态的
  • %matplotlib auto:在这个模式下会弹出一个单独 的绘图窗口,和在pycharm中一样
  • %matplotlib notebook:在这个模式下会在notebook中产生一个绘图窗口,能够对图片进行放大缩小等操作。

需要重启notebook才能使用

创建画布实例

fig = plt.figure()

创建“区域规划图”实例(GridSpec实例)

spec = gridspec.GridSpec(nrows=2,
                         ncols=2,
                         figure=fig,
#                       hspace=2,                                 #坐标系实例之间纵向间距
#                       wspace=2,                                 #坐标系实例之间横向间距
#                       left=0.25,right=0.9,top=0.9,bottom=0.25,  #把所有坐标实例打包在一起,整体伸缩/平移
                        width_ratios=[3,1],                      #设置坐标系的相对宽度(每个坐标系宽度=设定值/sum(设定值))
                        height_ratios=[3,1]                      #设置坐标系的相对高度(每个坐标系宽度=设定值/sum(设定值))
                      )

根据给定的"区域规划图",创建对应的坐标系实例

ax1 = fig.add_subplot(spec[0,0])       # 二维数组的索引操作
ax2 = fig.add_subplot(spec[0,1])
ax3 = fig.add_subplot(spec[1,0])
ax4 = fig.add_subplot(spec[1,1])

展示图表

plt.show() 

完整示例代码: 

# 导入所需库与plt绘图模式
%matplotlib auto
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
 
# 创建画布实例
fig = plt.figure()
 
# 创建“区域规划图”实例(GridSpec实例)
spec = gridspec.GridSpec(nrows=2,
                         ncols=2,
                         figure=fig,
#                       hspace=2,                                 #坐标系实例之间纵向间距
#                       wspace=2,                                 #坐标系实例之间横向间距
#                       left=0.25,right=0.9,top=0.9,bottom=0.25,  #把所有坐标实例打包在一起,整体伸缩/平移
                        width_ratios=[3,1],                      #设置坐标系的相对宽度(每个坐标系宽度=设定值/sum(设定值))
                        height_ratios=[3,1]                      #设置坐标系的相对高度(每个坐标系宽度=设定值/sum(设定值))
                      )

# 根据给定的"区域规划图",创建对应的坐标系实例
ax1 = fig.add_subplot(spec[0,0])       # 二维数组的索引操作
ax2 = fig.add_subplot(spec[0,1])
ax3 = fig.add_subplot(spec[1,0])
ax4 = fig.add_subplot(spec[1,1])
 
# 展示图表
plt.show()

(2)使用add_gridspec0方法向画布添加布局结构
这种方式需要创建画布和GridSpec类对象,之后在调用add_subplot()方法添加子图时传人一个GridSpec类对象即可。

导入所需库与plt绘图模式

%matplotlib auto
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

创建画布实例

fig = plt.figure() 

创建“区域规划图”实例(GridSpec实例)

spec = gridspec.GridSpec(nrows=2,
                         ncols=2,
                         figure=fig,
#                       hspace=2,                                 #坐标系实例之间纵向间距
#                       wspace=2,                                 #坐标系实例之间横向间距
                      left=0.25,right=0.9,top=0.9,bottom=0.25,  #把所有坐标实例打包在一起,整体伸缩/平移
                        width_ratios=[3,1],                      #设置坐标系的相对宽度(每个坐标系宽度=设定值/sum(设定值))
                        height_ratios=[3,1]                      #设置坐标系的相对高度(每个坐标系宽度=设定值/sum(设定值))
                      ) 

传入对象

ax1 = fig.add_subplot(gs[0,:])     # 二维数组的切片操作
ax1.set_title('gs[0, :]')
ax2 = fig.add_subplot(gs[1,:-1])
ax2.set_title('gs[1, :-1]')
ax3 = fig.add_subplot(gs[1:,-1])
ax3.set_title('gs[1:,-1]')
ax4 = fig.add_subplot(gs[-1,0])
ax4.set_title('gs[-1,0]')
ax5 = fig.add_subplot(gs[-1,-2])
ax5.set_title('gs[-1,-2]')

展示图表

plt.show()

完整代码如下:

# 导入所需库与plt绘图模式
%matplotlib auto
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
 
# 创建画布实例
fig = plt.figure()

# 创建GridSpec类对象
gs = fig.add_gridspec(3,3)

# 创建“区域规划图”实例(GridSpec实例)
spec = gridspec.GridSpec(nrows=2,
                         ncols=2,
                         figure=fig,
#                       hspace=2,                                 #坐标系实例之间纵向间距
#                       wspace=2,                                 #坐标系实例之间横向间距
                      left=0.25,right=0.9,top=0.9,bottom=0.25,  #把所有坐标实例打包在一起,整体伸缩/平移
                        width_ratios=[3,1],                      #设置坐标系的相对宽度(每个坐标系宽度=设定值/sum(设定值))
                        height_ratios=[3,1]                      #设置坐标系的相对高度(每个坐标系宽度=设定值/sum(设定值))
                      )
# 传入对象
ax1 = fig.add_subplot(gs[0,:])     # 二维数组的切片操作
ax1.set_title('gs[0, :]')
ax2 = fig.add_subplot(gs[1,:-1])
ax2.set_title('gs[1, :-1]')
ax3 = fig.add_subplot(gs[1:,-1])
ax3.set_title('gs[1:,-1]')
ax4 = fig.add_subplot(gs[-1,0])
ax4.set_title('gs[-1,0]')
ax5 = fig.add_subplot(gs[-1,-2])
ax5.set_title('gs[-1,-2]')

# 展示图表
plt.show()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值