用子图绘制每个图,作为主图的子图行

时间:2018-10-17 10:51:17

标签: python matplotlib figure

我具有plot_row函数,可将3张不同的图像绘制成一行:

def plot_row(row, image1, image2, image3):

    fig = plt.figure(figsize=(10,10))

    plt.subplot(row,3,(row-1)*3+1)
    plt.imshow(image1)

    plt.subplot(row,3,(row-1)*3+2)
    plt.imshow(image2)

    plt.subplot(row,3,(row-1)*3+3)
    plt.imshow(image3)

    #fig.savefig('out_ff'+str(row)+'.jpg')

如果我不注释代码的最后一行,则在执行下一个代码时,每行3个子图将保存在单独的.jpg文件中:

figs = plt.figure(figsize=(10, 100))

for i in range(15):

    image1 = io.imread(path+str(i)+'.jpg')
    image2 = io.imread(path+str(i+1)+'.jpg')
    image3 = io.imread(path+str(i+2)+'.jpg')

    plot_row(i+1, image1, image2, image3)

因此,我想要的是将plot_row完成的所有绘图保存在单个.jpg文件中,如代码第二部分第一行中定义的“图”中所示。

谢谢!

1 个答案:

答案 0 :(得分:0)

您对plt.subplot的论点有些错误。第一个参数应该是总行数,而不是要在其上绘制的行。此外,由于您有fig = plt.figure(figsize=(10,10)),因此在每次调用函数时都将创建一个新图形。您还需要在绘制完每个图像后(即循环结束时)保存图形。因此,您的代码应类似于

def plot_row(row, image1, image2, image3):

    plt.subplot(15,3,(row-1)*3+1)
    plt.imshow(image1)

    plt.subplot(15,3,(row-1)*3+2)
    plt.imshow(image2)

    plt.subplot(15,3,(row-1)*3+3)
    plt.imshow(image3)

figs = plt.figure(figsize=(10, 100))

for i in range(15):

    image1 = np.random.randint(0,10,(10,10))
    image2 = np.random.randint(1,20,(10,10))
    image3 = np.random.randint(20,30,(10,10))

    plot_row(i+1, image1, image2, image3)

plt.savefig('out_ff'+str(row)+'.jpg')
plt.show()