Matplotlib Legend Markers Only Once

238

Je trace souvent un point sur un tracé matplotlib avec:

x = 10
y = 100
plot(x, y, "k*", label="Global Optimum")
legend()

Cependant, cela oblige la légende à mettre une étoile dans la légende deux fois, de sorte qu'elle ressemble à:

* * Global Optimum

quand je veux vraiment que ça ressemble à:

 *  Global Optimum

Comment puis-je faire cela?

carl
la source
48
J'aimerais pouvoir voter plusieurs fois sur cette question. Je déteste la numpoints=2convention par défaut et j'ai été soulagé de voir que quelqu'un avait déjà pris le temps de s'enquérir et d'obtenir une réponse.
Chris Redford
24
Mind: l'option pour les nuages ​​de points estscatterpoints=1
Marcos Alex

Réponses:

253

Cela devrait fonctionner:

legend(numpoints=1)

BTW, si vous ajoutez la ligne

legend.numpoints     : 1      # the number of points in the legend line

dans votre fichier matplotlibrc, ce sera la nouvelle valeur par défaut.

[Voir aussi points de dispersion, selon votre intrigue.]

API: lien vers les documents API

DSM
la source
7
Merci. Je suis tombé là-dessus aussi aujourd'hui. Pourquoi n'est-ce pas la valeur par défaut?
saltycrane
Pourriez-vous ajouter un lien vers l'API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Je pourrais juste le modifier moi-même, mais cela semble grossier.
tacaswell
2
Existe-t-il un moyen de réduire la zone que le point prend sur la légende?
Yotam
3
@DMS: Je n'avais pas vu ça. Mon erreur. Vous devez également le mettre en surbrillance en tant que code afin de le rendre plus visible.
Marcos Alex
2
Enfin, il est prévu que numpoints = 1 soit par défaut dans matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein
25

J'aime changer dynamiquement mes paramètres rc matplotlib dans chaque script python. Pour atteindre cet objectif, j'utilise simplement quelque chose comme ça au début de mes fichiers python.

from pylab import *
rcParams['legend.numpoints'] = 1

Cela s'appliquera à tous les tracés générés à partir de mon fichier python.

EDIT: Pour ceux qui n'aiment pas importer pylab, la réponse longue est

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
mcgagnon
la source