title: How to plot a list of image in loop using matplotlib?
body: <p>I have 10 image ids. From each ID, I can have raw image, ground truth, preprocessing, postprocessing path. I will read the image from each path and draw in a figure with sub-figures: columns indicates the fourth type of images: raw, gt, pre, post, while the rows indicate for image id from 1 to 10. </p>
  
  <p>Currently, I use <code>gridspec</code> to locate the sub figures and the axis from 1 to 40 for each image. I use a loop to read images on the list, then use conditions for place images in each axis. However, it looks very long code that I think Python and matplotlib can have a better way. Could you suggest to me the way? This is my current implementation </p>
  
  <pre><code>if __name__ == "__main__":
  
      fig = plt.figure(figsize=(50, 50))
      fig.patch.set_facecolor('white')
      gs1 = gridspec.GridSpec(4, 10)
      gs1.update(wspace=0.01, hspace=0.01)  # set the spacing between axes.
  
      ax1 = plt.subplot(gs1[0])
      ..
      ax40 = plt.subplot(gs1[39])
  
      ax1.axis('off')
      ...
      ax40.axis('off')
  
      ax37.text(0.5, -0.1, "(a)", size=20, ha="center",
                transform=ax13.transAxes)
      ax38.text(0.5, -0.1, "(b)", size=20, ha="center",
                transform=ax14.transAxes)
      ax39.text(0.5, -0.1, "(c)", size=20, ha="center",
                transform=ax15.transAxes)
      ax40.text(0.5, -0.1, "(d)", size=20, ha="center",
                transform=ax16.transAxes)
  
      image_id_list=['2011_1', '2011_2', '2012_1', '2012_1'...] #10 images id
  
      for i in range (len(image_id_list)):
          image_id=image_id_list[i] 
          raw_image_path='./Images/+ image_id +'jpg' 
          gt_image_path='./GT/+ image_id +'jpg'
          pre_image_path='./Pre/+ image_id +'jpg' 
          post_image_path='./Post/+ image_id +'jpg'        
          raw_image=Image.open(raw_image_path)       
          gt_image=Image.open(gt_image_path)
          pre_image=Image.open(pre_image_path) 
          post_image=Image.open(post_image_path)    
          if (i==0):
              ax1.imshow(raw_image)
              ax2.imshow(gt_image)
              ax3.imshow(pre_image)
              ax4.imshow(post_image)
          if (i==1):
              ax5.imshow(raw_image)
              ax6.imshow(gt_image)
              ax7.imshow(pre_image)
              ax8.imshow(post_image)
          if (i==2):
              ax9.imshow(raw_image)
              ax10.imshow(gt_image)
              ax11.imshow(pre_image)
              ax12.imshow(post_image)
          if (i==3):
              ax13.imshow(raw_image)
              ax14.imshow(gt_image)
              ax15.imshow(pre_image)
              ax16.imshow(post_image)
          ...
  
      plt.show()
      fig.savefig('./result.png',bbox_inches='tight')  # save the figure to file
      plt.close(fig)  # close the figure
  </code></pre>