92 votes

Arrêter la répétition des étiquettes de matplotlib dans la légende

Voici un exemple très simplifié :

xvalues = [2,3,4,6]

for x in xvalues:
    plt.axvline(x,color='b',label='xvalues')

plt.legend()

enter image description here

La légende montre maintenant 'xvalues' comme une ligne bleue 4 fois dans la légende. Existe-t-il un moyen plus élégant de résoudre ce problème que le suivant ?

for i,x in enumerate(xvalues):
    if not i:
        plt.axvline(x,color='b',label='xvalues')
    else:
        plt.axvline(x,color='b')

enter image description here

1voto

Ces extraits de code n'ont pas fonctionné pour moi personnellement. Je traçais deux groupes différents dans deux couleurs différentes. La légende affichait deux marqueurs rouges et deux marqueurs bleus, alors que je ne voulais en voir qu'un par couleur. Je vais coller une version simplifiée de ce qui a fonctionné pour moi :

Déclarations d'importation

import matplotlib.pyplot as plt

from matplotlib.legend_handler import HandlerLine2D

Données de traçage

points_grp, = plt.plot(x[grp_idx], y[grp_idx], color=c.c[1], marker=m, ms=4, lw=0, label=leglab[1])        
points_ctrl, = plt.plot(x[ctrl_idx], y[ctrl_idx], color=c.c[0], marker=m, ms=4, lw=0, label=leglab[0])

Ajouter une légende

points_dict = {points_grp: HandlerLine2D(numpoints=1),points_ctrl: HandlerLine2D(numpoints=1)}
leg = ax.legend(fontsize=12, loc='upper left', bbox_to_anchor=(1, 1.03),handler_map=points_dict)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X