Déplacer une annotation

Imaginez que vous fassiez un graphe avec d'intéressantes donées. Vous voulez affichez des informations à propos des donnée que vous avez affiché, un peu de la même façon que sur ce site : http://piwik.org/demo/

Es-ce possible avec python ?

Oui ! Et je vais vous monter comment. (Vous pouvez télécharger le script de déplacement d'annotation ici)

Annotation box

Premièrement, importons les modules dont nous avons besoin :

import matplotlib
import matplotlib.pyplot as plt

Seul matplotlib est nécessaire !

Maintenant, faisons un graph très simple :

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10), range(10))

Les choses intéressantes commencent ici. La façon de dessiner une boite pour afficher des informations est de faire ce que l'on appelle une annotation :

this_annotation = ax.annotate("coordinate : ",  # The text in the box
xy = (100,100), # The place to put the annotation
xycoords = 'figure pixels', # The coordinate to use
horizontalalignment = 'center', # The alignments
verticalalignment = 'bottom',
fontsize = 20,
fontweight = 'bold',# animated=True,
bbox = dict(boxstyle="round", fc='black', # Here is the box that decorates the text
ec="0.5", alpha=0.5)
)

Créons la fonction que nous permettra de bouger cette annotation :

def on_motion(event):
if event.inaxes:
this_annotation.set_text('coordinate : ' + str(event.x) + ' ' + str(event.y))
this_annotation.set_position((event.x, event.y))
this_annotation.xytext = (event.x, event.y)
ax.draw_artist(this_annotation)
plt.draw()

Maintenant, nous devons capter le fait que la souris passes sur le graphe :

fig.canvas.mpl_connect('motion_notify_event', on_motion)

Et affichons le graphe :

plt.show()

Télécharget le scripte de déplacement d'annotation.