Matplotlib图例标记仅显示一次

241

我经常使用以下代码在matplotlib的图表上画点:

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

然而,这会导致图例在图例中两次放置一个星号,使其看起来像:

* * Global Optimum

当我真的想要它看起来像这样:

 *  Global Optimum

我怎么做这个?


48
我希望我能够多次点赞这个问题。我讨厌默认的“numpoints=2”约定,并且很欣慰看到已经有人花时间提出了这个问题并得到答案。 - Chris Redford
24
选项scatterpoints=1是用于散点图的。 - Marcos Alex
2个回答

255

这应该可以工作:

legend(numpoints=1)

顺便提一句,如果您添加这行代码

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

如果将此内容添加到您的matplotlibrc文件中,则这将成为新的默认设置。

[根据您的绘图情况,还可以查看scatterpoints。]

API: 链接至API文档


7
谢谢。我今天也遇到了这个问题。为什么这不是默认设置? - saltycrane
请忽略我之前关于默认值为什么是这样的删除评论,它们是错误的。 - tacaswell
2
有没有办法减小图例上点所占的面积? - Yotam
3
@DMS:我之前没有看到那个。我的错。你应该将它标记为代码以使其更加明显。 - Marcos Alex
2
终于,matplotlib 2.0 的默认值计划为numpoints=1!太好了!https://github.com/matplotlib/matplotlib/issues/4854 - DanHickstein
显示剩余3条评论

24
我喜欢在每个Python脚本中动态更改我的matplotlib rc参数。为了实现这个目标,我只需在Python文件开头使用类似以下代码的内容即可。
from pylab import *
rcParams['legend.numpoints'] = 1

这将适用于从我的Python文件生成的所有图。
编辑:对于不喜欢导入pylab的人,长答案是
import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接