Matplotlib 图例:如何为多个散点赋值
我正在使用Python的matplotlib库来生成高质量的xy散点图。遇到了一个关于图例中标记的问题。我正在绘制两个不同的xy散点系列;一个是一组形成曲线的xy点,另一个是一个单独的xy点。
我希望图例中能显示3个“曲线”的标记,和1个单独点的标记。我知道改变图例中标记数量的唯一方法是使用“scatterpoints”这个参数,但这个参数会影响图例中所有系列的标记数量,我不太确定如何单独改变每个图例条目的标记数量。
很遗憾,作为新用户我不能发图片,但希望这个描述能足够清楚。有没有办法在matplotlib中为每个图例条目单独设置scatterpoints的值?
编辑:这里有一些链接,展示了不同scatterpoints值的图片。
scatterpoints = 3: https://i.stack.imgur.com/KK4Kn.jpg
scatterpoints = 1: https://i.stack.imgur.com/DAp2G.jpg
希望这能让问题更清楚一些。
1 个回答
5
你可以获取图例中的线条,并自己进行修改:
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() 来改变标记的数量。