Reduce the gap between rows when using matplotlib subplot?

后端 未结 3 1748
-上瘾入骨i
-上瘾入骨i 2021-01-21 15:11

My subplot results

My code

fig,ax = plt.subplots(rows,cols, figsize = [24,24])
plt.subplots_adjust(hspace=0, wspace=0)

for i in range(cols):
    step          


        
相关标签:
3条回答
  • 2021-01-21 15:45

    The ratio in figsize should be same as the ratio of rows and cols in plt.subplot(rows, cols, figsize). For example, if rows is 2 and cols is 4, then the ratio is 1/2, thus figsize being (15, 7.5)(same ratio) would be good.

    Following code is an example.

    fig, ax = plt.subplots(2, 4, figsize=(15, 7.5))
    for i in range(2):
        for j in range(4):
            img = cv2.cvtColor(cv2.imread(os.path.join('../input/deepfake486326facescleaned', train_df.loc[i*2+j, 'name_path'])), cv2.COLOR_BGR2RGB)
            ax[i][j].imshow(img)
            ax[i][j].set_title(train_df.loc[i*2+j, 'label'])
    

    0 讨论(0)
  • 2021-01-21 15:52

    You may either shrink the figure size in vertical direction, e.g.

    fig,ax = plt.subplots(rows,cols, figsize = [24,12])
    

    or you may keep the square figure size but put more margin around the subplots

    plt.subplots_adjust(bottom=0.3, top=0.7, hspace=0)
    
    0 讨论(0)
  • 2021-01-21 15:56

    You have used figsize=[24,24] to make it a square image. subplots_adjust then makes each ax[i,j] to stick to the adjacent one. But ax.imshow() does not fill each ax. In your sample above, if the vertical size of the image were larger, it would have filled the area alloted to that axes, but by distorting the image. If you want to try that out, use the command ax[0,i].imshow(a[ind,:,:],cmap='gray', aspect='auto'): the aspect='auto' part will stretch your images to fill the axes. If you want the image aspect ratio to not be distorted, then you have to edit your figsize accordingly.

    0 讨论(0)
提交回复
热议问题