【问题标题】:Matplotlib legend: how to assign multiple scatterpoints valuesMatplotlib 图例:如何分配多个散点值
【发布时间】:2011-08-05 19:25:23
【问题描述】:

我在 python 中使用 matplotlib 库来生成出版质量的 xy 散点图。我遇到了关于图例中标记的问题。我正在绘制 2 个不同的 xy 散点系列;一个是形成曲线的一组xy点,另一个是单个xy点。

我希望图例显示“曲线”的 3 个标记和单点的 1 个标记。我知道如何更改图例标记数量的唯一方法是在声明图例时使用“scatterpoints”参数。但是,此参数设置图例中 all 系列的标记数量,我不确定如何单独更改每个图例条目

遗憾的是,我不能以新用户的身份发布图片,但希望这个描述就足够了。 有没有办法使用 matplotlib 为每个图例条目单独设置散点值?

编辑:这里是显示具有不同散点值的图像的链接。

散点 = 3:http://imgur.com/8ONAT

散点 = 1:http://imgur.com/TFcYV

希望这能让问题更清楚一点。

【问题讨论】:

  • 您想将“曲线”分成三个“段”并为每个段使用不同的标记吗?您想如何将标记分配给散布“曲线”的点?

标签: python matplotlib plot legend markers


【解决方案1】:

你可以得到图例中的线,并自己改变它:

import numpy as np
import pylab as pl
x = np.linspace(0, 2*np.pi, 100)
pl.plot(x, np.sin(x), "-x", label=u"sin")
pl.plot(x, np.random.standard_normal(len(x)), 'o', label=u"rand")
leg = pl.legend(numpoints=3)
l = leg.legendHandles[1]
l._legmarker.set_xdata(l._legmarker.get_xdata()[1:2])
l._legmarker.set_ydata(l._legmarker.get_ydata()[1:2])
##or
#l._legmarker.set_markevery(3)
pl.show()

Legend.legendHandles 是图例中所有线条的列表,线条的_legmarker 属性是标记。

您可以调用 set_markevery(3) 或 set_xdata() & set_ydata() 来更改标记的数量。

【讨论】:

  • 这个答案对我很有用,谢谢。我要补充一点:_legmarker 属性存在于 pyplot.plot() 生成的 Line2D 集合中,但不存在于 pyplot.scatter() 生成的 RegularPolyCollection 集合中。在我的情况下这没问题,因为我只是将需要绘制的单点从 plt.scatter() 转换为 plt.plot()。
猜你喜欢
  • 2013-06-29
  • 2017-06-22
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 2017-10-14
相关资源
最近更新 更多