gpt4 book ai didi

python - 使用 python 和 matplotlib,在两行之间填充未给出预期输出

转载 作者:行者123 更新时间:2023-11-30 22:42:59 25 4
gpt4 key购买 nike

我正在尝试绘制一条具有相关误差的线性线。我计算了斜率 (a) 和截距 (b) 的值。此外,我还计算了与这些值相关的误差。所以我画了下面典型公式给出的线。

y=ax+b

但是,除了线条之外,我还想绘制相关的错误。我想到了绘制与这些公式相关的线条并将线条之间的空间涂成灰色的想法。

y=(a+a_sd)x+(b+b_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()

enter image description here

最佳答案

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

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

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

distance_sorted = sorted(distance)

plt.errorbar(distance,time,yerr=time_SD, xerr=distance_SD, linestyle="None")
abline_values = [(a)*i + (b) for i in distance_sorted]
abline_values_plus = [(a+a_sd)*i + (b+b_sd) for i in distance_sorted]
abline_values_minus = [(a-a_sd)*i + (b-b_sd) for i in distance_sorted]
plt.plot(distance_sorted, abline_values,"r")

plt.fill_between(distance_sorted,abline_values_minus,abline_values_plus, facecolor='lightgrey', edgecolors="None")

plt.show()

<小时/>该文档没有提到对 x 值进行排序的要求。原因可能是 fill_ Between 实际上即使对于未排序的列表也适用,只是不是人们期望的那样。也许下面的动画可以更直观地理解这个问题:

enter image description here

关于python - 使用 python 和 matplotlib,在两行之间填充未给出预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41935152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com