Matplotlib绘制子图subplot+自定义子图网格布局subplot2grid

文章目录

    • 一、 subplot绘制子图
    • 二、自定义网格布局subplot2grid
      • 2.1参数说明
      • 2.2示例

一、 subplot绘制子图

使用matplotlib绘图时通常会绘制子图用于清晰展示,我们通过subplot来绘制子图位置即可。
subplot通常用来定位的参数有三个(行数,列数,子图索引),三个参数用‘,’隔开,也可简化不写“,” 实例代码例如:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
def f(x):
    '''定义要绘制的函数'''
    return x**2


plt.figure(figsize=(10,10))#设置画布大小
x= np.linspace(0,2)
# 将画布分成2x1的布局,占用第1个(即第2行第1列的子图)
plt.subplot(211)
plt.plot(x,f(x))
plt.title("第一幅子图")
# 将画布分成2x3的布局,占用第4个(即第2行第1列的子图)
plt.subplot(234)
plt.plot(x,f(x))
plt.title("第二幅子图")
# 将画布分成2x3的布局,占用第5个(即第2行第2列的子图)
plt.subplot(235)
plt.plot(x,f(x))
plt.title("第三幅子图")

Matplotlib绘制子图subplot+自定义子图网格布局subplot2grid_第1张图片
但是这种方法有个缺点,比如我想把上述的第三幅子图占据后面的两个子图的位置,用subplot的三个参数是无法做到的,那么这时我们就需要子图的网格布局

二、自定义网格布局subplot2grid

2.1参数说明

subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)

shape:网格的尺寸
loc:绘制子图位置
rowspan:轴向下跨距的列数。
colspan:轴向右跨距的行数。

2.2示例

为了实现让第三幅子图占两行,我们使用subplot2grid进行网格布局,

plt.figure(figsize=(12,8))

#在2行3列的表格中,第一行第一列的位置绘制一个轴向右跨距为3的子图
plt.subplot2grid((2,3) ,(0, 0), colspan=3)
plt.title("第一幅子图")
plt.plot(x,f(x))

#在2行3列的表格中,第2行第1列的位置绘制一个子图
plt.subplot2grid((2,3), (1, 0))
plt.title("第二幅子图")
plt.plot(x,f(x))

plt.subplot2grid((2,3) ,(1, 1), colspan=2)
plt.title("第三幅子图")
plt.plot(x,f(x))

Matplotlib绘制子图subplot+自定义子图网格布局subplot2grid_第2张图片

更多布局:

fig = plt.figure(figsize=(15,15))
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)
ax1.set_title("第一幅子图")
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
ax2.set_title("第二幅子图")
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax3.set_title("第三幅子图")
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.set_title("第四幅子图")
ax5 = plt.subplot2grid((3, 3), (2, 1))
ax5.set_title("第五幅子图")
plt.show()

Matplotlib绘制子图subplot+自定义子图网格布局subplot2grid_第3张图片

你可能感兴趣的:(Matplotlib绘制子图subplot+自定义子图网格布局subplot2grid)