代码之家  ›  专栏  ›  技术社区  ›  Ahmad

如何绘制具有不同列跨度的四个子图?

  •  1
  • Ahmad  · 技术社区  · 5 年前

    我尝试用 matplotlib.pyplot 如下所示:

    | plot1 | plot2|
    |    plot3     |
    |    plot4     |
    

    我发现的大多数例子包括三个类似的情节:

    ax1 = plt.subplot(221)
    ax2 = plt.subplot(222)
    ax3 = plt.subplot(212)
    

    这三个情节的情节都很成功(不过,我不知道是怎么做的 ax3 )现在,我想把4号地块添加到这个布局中。无论我做了什么,我都不能成功。

    你能指导我如何做到吗?

    2 回复  |  直到 5 年前
        1
  •  4
  •   Sheldore    5 年前

    你可以使用 subplot2grid . 这真的很方便。

    博士说

    在网格中创建子批次。网格是由形状指定的,在loc的位置,跨行扫描,每个方向的colspan单元格。loc的索引基于0。

    首先根据行数和列数定义大小 (3,2) 在这里。然后定义特定子批次的起始(行、列)位置。然后指定该特定子批次所跨越的行/列数。行跨度和列跨度的关键字是 rowspan colspan 分别。

    import matplotlib.pyplot as plt
    
    ax1 = plt.subplot2grid((3, 2), (0, 0), colspan=1)
    ax2 = plt.subplot2grid((3, 2), (0, 1), colspan=1)
    ax3 = plt.subplot2grid((3, 2), (1, 0), colspan=2)
    ax4 = plt.subplot2grid((3, 2), (2, 0), colspan=2)
    plt.tight_layout()
    

    enter image description here

        2
  •  1
  •   SimonF    5 年前

    您提供给子批次的整数实际上是3个部分:

    • 第一位:行数
    • 第二位:列数
    • 第三位:索引

    因此,对于每个对子地块的调用,我们指定应该如何划分绘图区域(使用行和列),然后指定将绘图放置在哪个区域(使用索引),请参见下面的图片。

    ax1 = plt.subplot(321)  # 3 rows, 2 cols, index 1: col 1 on row 1
    ax2 = plt.subplot(322)  # 3 rows, 2 cols, index 2: col 2 on row 1
    ax3 = plt.subplot(312)  # 3 rows, 1 cols, index 2: col 1 on row 2
    ax4 = plt.subplot(313)  # 3 rows, 1 cols, index 3: col 1 on row 3
    

    docs :

    三位整数或三个单独的整数,描述 子批次的位置。如果这三个整数是nrows、ncols和 按顺序索引,子批次将在网格上占据索引位置。 有nrows行和ncols列。索引从左上角的1开始 向右转。

    pos是一个三位整数,其中第一位是 行,第二个是列数,第三个是 次要情节。即,图添加子批次(235)与图添加子批次(2, 3, 5)。请注意,对于此表单,所有整数必须小于10 工作。

    321 312