我一直在做一些线性回归,并希望在图例的同一行上绘制标记(原始数据)和线条(回归).为简单起见,这是一个虚假的回归:
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条线.我怎样才能做到这一点?
我试图用置信带绘制一些数据.我正在为每个数据流创建两个图:plot和fill_between.我希望图例看起来类似于图表,其中每个条目都有一个框(置信区域的颜色),中间有一条较暗的实线.到目前为止,我已经能够使用补丁来创建矩形图例键,但我不知道如何实现中心线.我尝试使用舱口,但无法控制位置,厚度或颜色.
我最初的想法是尝试组合两个补丁(Patch和2DLine); 然而,它还没有奏效.有更好的方法吗?我的MWE和当前数字如下所示.
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,1,11)
y = np.linspace(0,1,11)
plt.plot(x, y, c='r')
plt.fill_between(x, y-0.2, y+0.2, color='r', alpha=0.5)
p = mpatches.Patch(color='r', alpha=0.5, linewidth=0)
plt.legend((p,), ('Entry',))
Run Code Online (Sandbox Code Playgroud)

我想在图例下的"红色圆圈"符号旁边添加一个"红色填充方形"符号.我该如何实现这一目标?我更喜欢坚持使用pyplot而不是pylab.
以下是我一直在使用的代码:
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.29,0.86,0.68])
plt.ylabel('Radial Velocity (km s$^{-1}$)')
plt.plot(time_model, rv_model_primary, 'k-', label = 'Primary')
plt.plot(time_model_sec, rv_model_secondary, 'k--', label = 'Secondary')
plt.plot(time_obs, rv_obs_primary, 'bo', label='XYZ')
plt.plot(time_obs_apg, rv_obs_primary_apg, 'ro', label='This Work')
plt.plot(time_obs_apg_sec, rv_obs_secondary_apg, 'rs')
plt.plot((0.0, 1.0),(0.0,0.0), 'k-.')
plt.legend(loc='upper left', numpoints=1)
Run Code Online (Sandbox Code Playgroud)
这是我试过的:
p1=plt.plot(time_model, rv_model_primary, 'k-')
p2=plt.plot(time_model_sec, rv_model_secondary, 'k--')
p3=plt.plot(time_obs, rv_obs_primary, 'bo')
p4=plt.plot(time_obs_apg, rv_obs_primary_apg, 'ro')
p5=plt.plot(time_obs_apg_sec, rv_obs_secondary_apg, 'rs')
plt.legend([p1,p2,p3,(p4,p5)],["Primary", "Secondary", "XYZ", "This Work"])
Run Code Online (Sandbox Code Playgroud)

在使用tcaswell的建议更改代码后,我得到以下内容.看起来不错,但我希望只有一个蓝色符号,同时保持两个为红色.目前有两个.

通过将numpoints = 1添加到常规图例()的最终解决方案起作用.这就是我想要的方式.谢谢tcaswell!
