使用python和matplotlib,在两行之间填充,但未给出预期的输出
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python和matplotlib,在两行之间填充,但未给出预期的输出,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3137字,纯文字阅读大概需要5分钟。
内容图文
![使用python和matplotlib,在两行之间填充,但未给出预期的输出](/upload/InfoBanner/zyjiaocheng/692/b9dab1d48443404aa632eab6bba5f708.jpg)
我正在尝试绘制带有相关错误的线性线.
我计算了斜率(a)和截距(b)的值.另外,我计算了与这些值相关的误差.因此,我画出了以下典型公式给出的界线.
y=ax+b
但是,除了该行外,我还想绘制相关的错误.我想到了绘制与这些公式关联的线并将线之间的空间涂成灰色的想法.
y=(a+a_sd)x+(b+b_sd)
y=(a-a_sd)x+(b-b_sd)
使用以下代码,我可以为线之间的部分表面着色,但不能为整个跨度着色(请参见随附的输出).
我认为这可能是由于未对“距离”进行排序,而fill_between分别使用distance [0]和distance [-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)对列表进行排序.
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实际上甚至可以用于未排序的列表,但这并不是人们期望的那样.也许以下动画对此问题提供了更直观的理解:
内容总结
以上是互联网集市为您收集整理的使用python和matplotlib,在两行之间填充,但未给出预期的输出全部内容,希望文章能够帮你解决使用python和matplotlib,在两行之间填充,但未给出预期的输出所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。