Marcadores de legenda do matplotlib apenas uma vez


238

Costumo traçar um ponto em um gráfico matplotlib com:

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

No entanto, isso faz com que a legenda coloque uma estrela na legenda duas vezes, de modo que se pareça com:

* * Global Optimum

quando eu realmente quero que fique assim:

 *  Global Optimum

Como eu faço isso?


48
Eu gostaria de poder aprovar esta pergunta várias vezes. Odeio a numpoints=2convenção padrão e fiquei aliviado ao ver que alguém já havia se dedicado a perguntar e obter uma resposta.
Chris Redford

24
Mente: a opção para gráficos de dispersão éscatterpoints=1
Marcos Alex

Respostas:


253

Isso deve funcionar:

legend(numpoints=1)

BTW, se você adicionar a linha

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

no seu arquivo matplotlibrc, esse será o novo padrão.

[Veja também pontos de dispersão, dependendo do seu gráfico.]

API: link para documentos da API


7
Obrigado. Encontrei isso hoje também. Por que esse não é o padrão?
Saltycrane 27/05

Você poderia adicionar um link à API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Eu poderia apenas editá-lo em mim mesmo, mas isso parece rude.
tacaswell

2
Existe alguma maneira de reduzir a área que o ponto ocupa na lenda?
Yotam

3
@ DMS: eu não tinha visto isso. Meu erro. Você também deve destacá-lo como código para torná-lo mais visível.
Marcos Alex

2
Finalmente, há planos para numpoints = 1 como padrão no matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein

25

Eu gosto de alterar meus parâmetros matplotlib rc dinamicamente em todos os scripts python. Para atingir esse objetivo, simplesmente uso algo assim no início dos meus arquivos python.

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

Isso se aplicará a todos os gráficos gerados a partir do meu arquivo python.

EDIT: Para quem não gosta de importar o pylab, a resposta longa é

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.