Add annotation in an interactive plot
<p>I m trying to add an annotation at the middle of my interactive plot
I would like to see my <em>i</em> value of the loop generating my <em>test</em> list
with all my data. For each imshow plot, i would like to see my <em>i</em> value,
i add an ax.annotate but it doesnt work.</p>

<pre><code>import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure() # make figure
ax = fig.add_subplot(111)

test = []
mask2 = np.random.randint(255, size=(20, 20))

for i in range(1,5,3):
  kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(i,i))
  res = (cv2.morphologyEx(mask2.astype(uint8),cv2.MORPH_OPEN,kernel))
  #plt.imshow(res,cmap=plt.cm.gray,alpha=1);plt.show()
  test.append(res)


# make axesimage object
# the vmin and vmax here are very important to get the color map correct
im = ax.imshow(test[0], cmap=plt.get_cmap('hot'), vmin=0, vmax=255)
im2 = ax.annotate('This is awesome!', 
             xy=(76, -10.75),  
             xycoords='data',
             textcoords='offset points',
             arrowprops=dict(arrowstyle="-&gt;"))
plt.show()

# function to update figure
def updatefig(j):
    # set the data in the axesimage object
    im.set_array(test[j])
    # return the artists set
    return im,
# kick off the animation
ani = animation.FuncAnimation(fig, updatefig, frames=range(20), 
                              interval=50, blit=True)
plt.show()
</code></pre>

<p>I have found a way out. I added a "set_text" inside my update function and i return picture and text : </p>

<pre><code>  test = []
  test2 = []
  for i in range(3,27,3):
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(i,i))
res = (cv2.morphologyEx(mask2,cv2.MORPH_OPEN,kernel))
#plt.imshow(res,cmap=plt.cm.gray,alpha=1);plt.show()
test.append(res)
test2.append(i)


  fig = plt.figure() # make figure
  ax = fig.add_subplot(111)

  # make axesimage object
  # the vmin and vmax here are very important to get the color map correct
  im = ax.imshow(test[0], cmap=plt.get_cmap('hot'), vmin=0, vmax=255)
  time_template = 'Diffusion - Kernel size : %2.2d'    # prints running simulation time
  txt = ax.text(500, 80, '', fontsize=15,color='red')
  #plt.show()

  # function to update figure
  def updatefig(j):
  # set the data in the axesimage object
  im.set_array(test[j])
  txt.set_text(time_template%(float(np.asarray(test2[j]))))
  return im,txt

  ani = animation.FuncAnimation(fig, updatefig, frames=range(len(test)), 
                interval=100, blit=False,repeat=True)
  plt.show()
</code></pre>

python numpy matplotlib annotations interactive