2017-10-16 7 views
1

J'ai 3 axes avec une ou plusieurs lignes. Pour obtenir le sélecteur de la ligne où se trouve mon curseur, j'ai essayé de changer la zord de la hache qui contient la ligne.Matplotlib zorder ax cacher les autres lignes de l'axe

Précision: Je suis dans un FigureCanvasQTAgg dérivé objet

def onmove(self, event): 
    """Methode appelée à chaque mouvement de souris dans le canvas.""" 
    for curr_axe in self.fig.get_axes(): 
     curr_axe.set_zorder(0) 
     if curr_axe.in_axes(event): 
      axe_x, axe_y = self.axe_dict[curr_axe.name].get_grid_coord(
       event.x, event.y) 

     for line in curr_axe.get_lines(): 
      contain, _ = line.contains(event) 
      if contain and line.get_label()[0] != '_': 
       curr_axe.set_zorder(0.1) 
       self.draw() 
       self.current_line = line.get_label() 

La première hache est simplement créée en utilisant la classe Haches Matplotlib() Ajouter ajouté dans la figure avec add_axes()

axe = Axes(figure, rect) 
figure.add_axes(axe) 

Le les autres axes sont créés via twinx() et ajoutés à la figure avec add_axes() aussi

axe_2 = axe.twinx() 
figure.add_axes(axe_2) 
axe_3 = axe.twinx() 
figure.add_axes(axe_3) 

La méthode onmove fonctionne (je peux choisir chaque ligne que je veux) mais quand la zord de la première hache de dessin l'active, elle cache les lignes des axes. Exemple: si ma souris est sur une ligne de la hache nommée hache, elle cache les lignes d'axe_2 et d'axe_3.

enter image description here

Répondre

0

Je devine que le problème est la couleur de fond de votre hache haut, qui masque les lignes d'axes sous-jacents.

Essayez de supprimer les arrière-plans de tous vos axes et de voir si cela résout le problème.

axe.patch.set_visible(False) 
axe_2.patch.set_visible(False) 
axe_3.patch.set_visible(False) 
+0

C'est absolument exact merci beaucoup – reynum