是否有可能将线条和点放入 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
。
是否有可能将线条和点放入 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
。
在阅读了 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()
结果如下所示:
这有点小技巧,但它实现了您的目标并以适当的顺序将所有部分(即图例和文本)放置在情节上。
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
,将文本设置在顶部。