2011-03-24 2 views
1

Je me demande si quelqu'un a une solution à un problème que j'ai lorsque j'utilise une légende dragable en conjonction avec plusieurs axes. J'utilise gridspec et figure (matplotlib 1.0.1, qt4 backend) pour créer 2 axes - pas de pyplot. Lorsque la légende est traînée d'un axe à l'autre et relâchée, sa glissabilité cesse de fonctionner. Si une partie de la légende est en dehors des limites de l'axe, la légende peut être ramassée en cliquant sur cette partie, mais pas si la souris est cliquée sur une zone de la légende à l'intérieur de l'axe.Légende dragable avec problème de plusieurs axes

J'ai essayé Adam Fraser’s original code mais la légende glisserait sous les 2e axes dans mon application.

Mon application est vraiment assez grand - trop grand pour montrer ici, donc pour illustrer le problème, je l'ai modded du code de la Matplotlib Legend Guide (utilise pyplot) comme suit:

from matplotlib.pyplot import * 

subplot(211) 
plot([1,2,3], label="test1") 
plot([3,2,1], label="test2") 
leg=legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, 
      ncol=2, mode="expand", borderaxespad=0.) 
leg.draggable(state=True, use_blit=True) 

subplot(223) 
plot([1,2,3], label="test1") 
plot([3,2,1], label="test2") 
leg=legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) 
leg.draggable(state=True, use_blit=True) 

show() 

Il produit un terrain avec quelques axes et deux légendes.

Exécutez le code et faites glisser les légendes autour pour voir l'effet (si vous n'avez aucun problème, il doit être quelque chose que j'ai mangé et je m'excuse).

Je soupçonne qu'une solution peut être de niveau assez bas, mais qui sait, c'est peut-être une solution simple?

Merci pour toute aide.

+0

Description 1 est correcte. Pas de réponse. – joaquin

Répondre

0

J'ai reproduit le problème. La partie de la légende qui entre dans la figure extraterrestre devient non cliquable, comme si la figurine attrapait les événements de la position de la souris et ne les renvoyait pas à d'autres gestionnaires.

Le code minimal qui reproduit le problème (à expérimenter avec ipython -pylab) est:

In [16]: f211 = plt.subplot(211) 
In [17]: f212 = plt.subplot(212) 
In [18]: p1 = plot([1,2], label="test1") 
In [20]: leg = legend(loc=(0.5,0.5)) 
In [21]: d = leg.draggable(state=True, use_blit=True) 
Questions connexes