2016-09-26 2 views
0

Je suis en train d'ajouter une annotation au milieu de mon intrigue interactive Je voudrais voir mon i valeur de la boucle générant mon essai liste avec toutes mes données. Pour chaque intrigue imshow, je voudrais voir ma valeur i, j'ajoute un ax.annotate mais cela ne marche pas.Ajouter une annotation dans une intrigue interactive

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="->")) 
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() 

Répondre

1

J'ai trouvé un moyen de sortir. J'ai ajouté un "set_text" dans ma fonction de mise à jour et je renvoie l'image et le texte:

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()