title: How to run a smart loop for subplots in python
body: <p>So I'm trying to create a 3x3 box of 9 graphs, and while I've managed to do it by manually writing the code for each individual box, I want to learn how to do it using a loop. I can't seem to figure it out. Currently, I'm using the following:</p>
  
  <pre><code>from matplotlib import gridspec
  
  f, ((ax1, ax2, ax3), (ax4, ax5, ax6), (ax7, ax8, ax9)) = plt.subplots(3, 3, sharex='col', sharey='row')
  
  gs = gridspec.GridSpec(3, 3)
  fig = plt.figure(figsize=(20,20))
  
  fig.text(0.5, .95, 'Constant Slope for [O/Fe]/[Fe/H] for Various R and Z', ha='center', va='center', size = 50)
  fig.text(0.5, 0.08, '[Fe/H]', ha='center', va='center', size = 60)
  fig.text(0.09, 0.5, '[O/Fe]', ha='center', va='center', rotation='vertical', size = 60)
  
  ax1 = plt.subplot(gs[0])
  histogram1 = ax1.hist2d(fehsc, ofesc, bins=nbins, range=[[-1,.5],[0.2,0.4]])
  counts = histogram1[0]
  xpos = histogram1[1]
  ypos = histogram1[2]
  image = histogram1[3]
  newcounts = counts #we're going to iterate over this
  
  for i in range (nbins):
      xin = xpos[i]
      yin = ypos
      yline = m*xin + b
      reset = np.where(yin &lt; yline) #anything less than yline we want to be 0
      #index = index[0:len(index)-1]  
      countout = counts[i]
      countout[reset] = 0
      newcounts[i] = countout
  ax1.plot(xarr2, yarr2, color='w', linewidth='5', alpha = 0.3)
  ax1.plot(xarr, yarr, color='r')
  ax1.set_title('R in [5,7] kpc | Z in [1,2] kpc', size = 20)
  
  ax2 = plt.subplot(gs[1])
  histogram2 = ax2.hist2d(fehsc2, ofesc2, bins=nbins, range=[[-1,.5],[0.2,0.4]])
  counts = histogram2[0]
  xpos = histogram2[1]
  ypos = histogram2[2]
  image = histogram2[3]
  newcounts = counts #we're going to iterate over this
  
  for i in range (nbins):
      xin = xpos[i]
      yin = ypos
      yline = m*xin + b
      reset = np.where(yin &lt; yline) #anything less than yline we want to be 0
      #index = index[0:len(index)-1]  
      countout = counts[i]
      countout[reset] = 0
      newcounts[i] = countout
  ax2.plot(xarr2, yarr2, color='w', linewidth='5', alpha = 0.3)
  ax2.plot(xarr, yarr, color='r')
  ax2.set_title('R in [7,9] kpc | Z in [1,2] kpc', size = 20)
  </code></pre>
  
  <p>And so on and so forth, until ax9.</p>
  
  <p>What I've tried to do is the following:</p>
  
  <pre><code>for k in range(1,10):
      ax[k] = plt.subplot(gs[0])
      histogram1 = ax[k].hist2d(fehsc, ofesc, bins=nbins, range=[[-1,.5],[0.2,0.4]])
      counts = histogram1[0]
      xpos = histogram1[1]
      ypos = histogram1[2]
      image = histogram1[3]
      newcounts = counts #we're going to iterate over this
  
      for i in range (nbins):
          xin = xpos[i]
          yin = ypos
          yline = m*xin + b
          reset = np.where(yin &lt; yline) #anything less than yline we want to be 0
          countout = counts[i]
          countout[reset] = 0
          newcounts[i] = countout
      ax[k].plot(xarr2, yarr2, color='w', linewidth='5', alpha = 0.3)
      ax[k].plot(xarr, yarr, color='r')
      ax[k].set_title('R in [5,7] kpc | Z in [1,2] kpc', size = 20)
  </code></pre>
  
  <p>Because I want to take ax(k) in a loop and run all nine iterations at once. But obviously this isn't the way to do it, or just doesn't work. Is it possible to take ax_ and iterate it from 1 to 9 in a loop while calling it? </p>