自定义布局-关于Gridspec类

Gridspec模块的具体介绍

GridSpec是matplotlib中用于自定义子图布局的类。通过显式地创建GridSpec类对象,可以自定义画布中子图的布局结构,使得子图能够更好地适应画布。GridSpec类对象的使用方式与数组的使用方式相似,采用索引或切片的形式访问每个布局元素。此外,matplotlib中还为Figure对象提供了快速添加布局结构的方法add_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:可选参数,指定子图所属的Figure对象。
  • left、bottom、right、top:可选参数,指定子图网格的边界位置,取值范围为0到1。
  • wspace:可选参数,指定子图之间的水平间距,取值范围为0到1。
  • hspace:可选参数,指定子图之间的垂直间距,取值范围为0到1。
  • width_ratios:可选参数,指定每列子图的宽度比例。
  • height_ratios:可选参数,指定每行子图的高度比例。

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


#导入模块
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
#创建画布面向对象
fig = plt.figure()
#创建区域规划图
gs = GridSpec(2, 2, figure=fig)
#根据给定的"区域规划图",创建对应的坐标系实例
ax1 = fig.add_subplot(gs[0, 0])#二维数组的索引
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :])
#图像展示
plt.show()

 

上述代码中,我们创建了一个2x2的GridSpec类对象gs,并将其传入add_subplot()方法中,以创建三个子图。其中,第一个子图占据了第一行第一列,第二个子图占据了第一行第二列,第三个子图占据了第二行的所有列。

注意:Jupyter Notebook 默认输出的图片是静态的,无法进行放大等操作,可以添加指令,需要重启notebook才能使用。 

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

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

下面来说明使用GridSpec ()方法创建子图的布局结构

一、创建一个2行2列的4个子图
#导入模块
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec 
#创建画布实例
fig_1 = plt.figure()
#创建“区域规划图”实例(GridSpec实例)
spec_1 = gridspec.GridSpec(nrows=2, ncols=2, figure=fig_1)
#根据给定的“区域规划图”,创建对应的坐标系实例 
ax1 = fig_1.add_subplot(spec_1[0,0]) #二维数组的索引
ax2 = fig_1.add_subplot(spec_1[0,1]) 
ax3 = fig_1.add_subplot(spec_1[1,0])
ax4 = fig_1.add_subplot(spec_1[1,1])
#图像展示 
plt.show()

图片展示 

二、创建2行2列4个子图的基础上调整相对宽度和相对高度

#导入模块
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,
                        width_ratios=[2,4],  #设置坐标系的相对宽度(每个坐标系宽度=设定值/sum(设定值))
                        height_ratios=[2,4]  #设置坐标系的相对高度(每个坐标系宽度=设定值/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行2列4个子图的基础上表示子图的范围 

#导入模块
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
#创建画布实例
fig_1 = plt.figure()
 #创建“区域规划图”GridSpec实例
spec_1 = gridspec.GridSpec(nrows=2, ncols=2, figure=fig_1,
                          left=0.25, right=0.7, top=0.7, bottom=0.25  
                         #把所有坐标系实例“打包”在一起,整体伸缩/平移)
 
#根据给定的“区域规划图”,创建对应的坐标系实例
ax1 = fig_1.add_subplot(spec_1[0,0])
ax2 = fig_1.add_subplot(spec_1[0,1]) #二维数组索引操作
ax3 = fig_1.add_subplot(spec_1[1,0])
ax4 = fig_1.add_subplot(spec_1[1,1])
#图像展示 
plt.show()

图片展示 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值