title: Can I do something like imsave() with text overlay?
body: <p>I am using <code>imsave()</code> sequentially to make many PNGs that I will combine as an AVI and I would like to add moving text annotations. I use <a href="http://imagej.nih.gov/ij/features.html" rel="nofollow noreferrer">ImageJ</a> to make AVIs or GIFs.</p>
  
  <p>I don't want the axes, numbers, borders or anything, just the color image (as <code>imsave()</code> provides for example) with text (and maybe arrows) inside. These will change frame by frame. Pardon the use of jet.</p>
  
  <p>I could use <code>savefig()</code> with ticks off and then do cropping as post processing, but is there a more convenient, direct, or "matplotlibithic" way to do this that wouldn't be so hard on my hard drive? (final thing will be pretty big).</p>
  
  <p><a href="https://i.stack.imgur.com/Dx8gk.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Dx8gk.png" alt="enter image description here"></a></p>
  
  <p>A code snippet, added by request:</p>
  
  <pre><code>import numpy as np
  import matplotlib.pyplot as plt
  
  nx, ny = 101, 101
  
  phi   = np.zeros((ny, nx), dtype = 'float')
  do_me = np.ones_like(phi, dtype='bool')
  
  x0, y0, r0 = 40, 65, 12
  
  x = np.arange(nx, dtype = 'float')[None,:]
  y = np.arange(ny, dtype = 'float')[:,None]
  rsq = (x-x0)**2 + (y-y0)**2
  
  circle = rsq &lt;= r0**2
  
  phi[circle] = 1.0
  do_me[circle] = False
  
  do_me[0,:], do_me[-1,:], do_me[:,0], do_me[:,-1] = False, False, False, False
  
  n, nper = 100, 100
  phi_hold = np.zeros((n+1, ny, nx))
  phi_hold[0] = phi
  
  for i in range(n):
  
      for j in range(nper):
          phi2 = 0.25*(np.roll(phi,  1, axis=0) +
                       np.roll(phi, -1, axis=0) +
                       np.roll(phi,  1, axis=1) +
                       np.roll(phi, -1, axis=1) )
  
          phi[do_me] = phi2[do_me]
  
      phi_hold[i+1] = phi
  
  change = phi_hold[1:] - phi_hold[:-1]
  
  places = [(32, 20), (54,25), (11,32), (3, 12)]
  
  plt.figure()
  plt.imshow(change[50])
  for (x, y) in places:
      plt.text(x, y, "WOW", fontsize=16)
  plt.text(5, 95, "Don't use Jet!", color="white", fontsize=20)
  plt.show()
  </code></pre>