在图例文字中绘制点和线?

时间:2012-11-14 15:43:02

标签: matplotlib legend

是否有可能在matplotlib中将线条和点添加到图例文本中? 我有类似以下的内容

x=np.linspace(0,10,100)
ys=np.sin(x)
yc=np.cos(x)
pl.plot(x,ys,'--',label='sin')
pl.plot(x,yc,':',label='derivative of --')
pl.legend()
pl.show()

除了代替--之外,应该使用与图例标签sin前面相对应的颜色相同的符号。

2 个答案:

答案 0 :(得分:1)

在阅读了matplotlib源代码后,我终于找到了一个适合我的解决方案,并且不需要任何位置调整等,因为它使用matplotlibs内部V-和HPackers。

import numpy as np
import pylab as pl

x=np.linspace(0,10,100)
ys=np.sin(x)
yc=np.cos(x)

pl.plot(x,ys,'--',label='sin')
pl.plot(x,yc,':',label='derivative of')
leg=pl.legend()

# let the hacking begin
legrows = leg.get_children()[0].get_children()[1]\
             .get_children()[0].get_children()
symbol  = legrows[0].get_children()[0]
childs  = legrows[1].get_children().append(symbol)

pl.show()

结果如下:

enter image description here

答案 1 :(得分:0)

这有点像黑客,但它完成了你的目标,并以适当的顺序将所有部分(即图例和文字)放在图上。

import pylab

pl.plot(x,ys,'--',label='sin', color='green')
pl.plot(x,yc,':',label='derivative of --',color='blue')
line1= pylab.Line2D(range(10), range(10), marker='None', linestyle='--',linewidth=2.0, color="green")
line2= pylab.Line2D(range(10), range(10), marker='None', linestyle=':',linewidth=2.0, color="blue")
leg = pl.legend((line1,line2),('sin','derivative of      '),numpoints=1, loc=1)
pylab.text(9.4, 0.73, '- -', color='green')
leg.set_zorder(2)
pl.show()

我没有依赖行的默认颜色,而是将它们设置为可以在图例中专门引用它们。文本中为图例中第二行的“衍生物”留下了额外的空格,因此我们可以在其上放置文本(也就是sin行的相应符号/颜色)。然后指定文本的符号/颜色并将其放置,使其与图例中的文本对齐。最后,您可以通过zorder指定订单,将文字设置在最顶层。