matplotlib图例标记仅一次


238

我经常使用以下命令在matplotlib图上绘制点:

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

但是,这会导致图例两次在图例中放置一颗星星,如下所示:

* * Global Optimum

当我真的希望它看起来像:

 *  Global Optimum

我该怎么做呢?


48
我希望我可以多次支持这个问题。我讨厌默认numpoints=2约定,看到有人已经花时间询问它并得到答案,我感到很欣慰。
克里斯·雷德福

24
注意:散点图的选择是scatterpoints=1
Marcos Alex

Answers:


253

这应该工作:

legend(numpoints=1)

顺便说一句,如果您添加行

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

到您的matplotlibrc文件,那么这将是新的默认设置。

[另请参见散点图,具体取决于您的情节。]

API:链接到API文档


7
谢谢。我今天也遇到了这个。为什么这不是默认值?
saltycrane

您可以将链接添加到api吗?matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend 我可以自己编辑它,但这似乎很不礼貌。
tacaswell 2013年

2
有什么办法可以减少图例上的显示区域?
Yotam

3
@DMS:我没有看到。我的错。您还应该将其突出显示为代码,以使其更加可见。
Marcos Alex

2
最后,有计划在matplotlib 2.0中将numpoints = 1设为默认值!恶习!github.com/matplotlib/matplotlib/issues/4854
DanHickstein,2015年

25

我喜欢在每个python脚本中动态更改matplotlib rc参数。为了实现这个目标,我只是在python文件的开头使用了类似的东西。

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

这将适用于从我的python文件生成的所有图。

编辑:对于那些谁不喜欢导入pylab,长答案是

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.