matplotlib图例:在一行中包含来自两个不同图形的标记和线条

egi*_*ilk 6 python matplotlib legend

我一直在做一些线性回归,并希望在图例的同一行上绘制标记(原始数据)和线条(回归).为简单起见,这是一个虚假的回归:

from pylab import *
ax = subplot(1,1,1)
p1, = ax.plot([1,2,3,4,5,6],'r-', label="line 1")
p2, = ax.plot([6,5,4,3,2,1],'b-', label="line 2")

p3, = ax.plot([1.2,1.8,3.1,4.1,4.8,5.9],'ro', label="dots 1")
p4, = ax.plot([6.1,5.1,3.8,3.1,1.9,0.9],'bo', label="dots 2")

ax.legend(loc='center right',numpoints=1)
show()
Run Code Online (Sandbox Code Playgroud)

所以我希望图例由2条线组成,每条线显示一条线和一条点,而不是4条线.我怎样才能做到这一点?

tac*_*ell 6

你只需要legend更直接地使用它.请参阅Matplotlib - 如何使标记面颜色透明而不使线条透明用户指南.

ax.legend([(p1, p3), (p2, p4)], ['set 1', 'set 2'])
plt.draw()
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 2

你可以尝试一下

from pylab import *
ax = subplot(1,1,1)
p1, = ax.plot([1,2,3,4,5,6],'r-')
p2, = ax.plot([6,5,4,3,2,1],'b-')

p3, = ax.plot([1.2,1.8,3.1,4.1,4.8,5.9],'r-o', label="dots 1")
p4, = ax.plot([6.1,5.1,3.8,3.1,1.9,0.9],'b-o', label="dots 2")

ax.legend(loc='center right',numpoints=1)
show()
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要穷人的解决方案,您可以绘制绘图范围之外的内容并仅标记该图。例如

p5 = ax.plot(ones(2)*1e6,ones(2)*1e6,'r-o', label="dots 1")
Run Code Online (Sandbox Code Playgroud)

对其他标签执行相同的操作,然后强制您的绘图不包含p5,例如,像这样

ax.set_xlim(0,10);ax.set_ylim(0,10)
Run Code Online (Sandbox Code Playgroud)