使用python和matplotlib,在两行之间填充不提供预期输出的内容

使用python和matplotlib,在两行之间填充不提供预期输出的内容,python,matplotlib,Python,Matplotlib,我试图绘制一条带有相关误差的线性线。 I坡度(a)和截距(b)的计算值。此外,我还计算了与这些值相关的误差。所以我用下面的典型公式画了一条线 y=ax+b 然而,除了这条线,我还想画出相关的错误。我想出了一个主意,画出与这些公式相关的线条,并将线条之间的空间涂成灰色 y=(a+a\U sd)x+(b+b\U sd) y=(a-a_-sd)x+(b-b_-sd) 通过使用下面的代码,我可以为线条之间的部分曲面着色,但不能为整个跨度着色(请参见附带的输出)。 我认为这可能是因为“距离”没有排序,而f

我试图绘制一条带有相关误差的线性线。 I坡度(a)和截距(b)的计算值。此外,我还计算了与这些值相关的误差。所以我用下面的典型公式画了一条线

y=ax+b

然而,除了这条线,我还想画出相关的错误。我想出了一个主意,画出与这些公式相关的线条,并将线条之间的空间涂成灰色

y=(a+a\U sd)x+(b+b\U sd)

y=(a-a_-sd)x+(b-b_-sd)

通过使用下面的代码,我可以为线条之间的部分曲面着色,但不能为整个跨度着色(请参见附带的输出)。
我认为这可能是因为“距离”没有排序,而fill_between分别使用距离[0]和距离[-1]作为跨度的起点和终点。
一如既往,我们将非常感谢您的帮助

import matplotlib.pyplot as plt
        
distance=[0.35645334340084989, 0.55406894241607718, 0.10201413273193734, 0.13401365724625941, 0.71918808865838735, 0.14151335417722818]
time=[2.4004984846346171, 2.4909766335028447, 1.9852064018125195, 1.9083156734132103, 2.6380396934372863, 1.9114505780323543]
time_SD=[0.062393810960652669, 0.056945715242838917, 0.073960838867327183, 0.084111239062664475, 0.026912957190265499, 0.08595664694840538]
distance_SD=[0.035160608598240162, 0.032976715460514235, 0.02782911002465227, 0.035465701695038584, 0.043009444687382707, 0.038387585107200854]
a=1.17887019041
b=1.83339229489
a_sd=0.159771527859
b_sd=0.0762509747218
        
plt.errorbar(distance,time,yerr=time_SD, xerr=distance_SD, linestyle="None") 
abline_values = [(a)*i + (b) for i in distance]
abline_values_plus = [(a+a_sd)*i + (b+b_sd) for i in distance]
abline_values_minus = [(a-a_sd)*i + (b-b_sd) for i in distance]
plt.plot(distance, abline_values,"r")
plt.fill_between(distance,abline_values_minus,abline_values_plus,facecolor='lightgrey', interpolate=True, edgecolors="None")
leg = plt.legend(loc="lower right", frameon=False, handlelength=0, handletextpad=0)
for item in leg.legendHandles:
    item.set_visible(False)
plt.show()

要使用
pyplot.fill_between()
绘制水平坐标的列表应进行排序。使用未排序的x值列表是可能的,但可能会导致不期望的结果

可以使用
sorted(list)
对列表进行排序


文件中没有提到对x值进行排序的要求。原因可能是,即使在未排序的列表中,fill_-between也能起作用,只是这不是人们所期望的方式。也许下面的动画可以更直观地理解这个问题:


你是对的
之间填充\u似乎期望对值进行排序。不过,政府对这种行为并不清楚。但以下示例显示了相同的效果:

import matplotlib.pyplot as plt
from numpy import random, array

#x = random.randn(20) #does not work
x = array(sorted(random.randn(20))) #works

a = 2
d = .5

y_h = x*(a+d)
y_l = x*(a-d)

plt.fill_between(x,y_h, y_l)
plt.show()

作为一种解决方法,只需在计算错误行之前使用
sorted
对值进行排序即可

我认为
fill\u-between
并不期望任何东西,更重要的是,当人们将它与未排序的列表一起使用时,人们可能会期望一些不同的东西(参见我更新的答案)。因为它使用的是未排序的列表,所以文档中没有说明这一点。
import matplotlib.pyplot as plt
from numpy import random, array

#x = random.randn(20) #does not work
x = array(sorted(random.randn(20))) #works

a = 2
d = .5

y_h = x*(a+d)
y_l = x*(a-d)

plt.fill_between(x,y_h, y_l)
plt.show()