【发布时间】:2014-04-23 16:47:44
【问题描述】:
我有一个奇怪的情况,我需要一些帮助。我有以下数据:
xdata = [ 11.125, 11.375, 11.625, 11.875, 12.125, 12.375, 12.625, 12.875, 13.125, 13.375, 13.625, 13.875, 14.125, 14.375, 14.625, 14.875, 15.125, 15.375]
ydata = [ 5.49305494, 6.51732366, 6.54733551, 6.38045781, 6.16101383, 5.93700054, 5.70674253, 5.47409529, 5.23715401, 4.98422568, 4.72124987, 4.43762374, 4.11756956, 3.74888544, 3.32613096, 2.79169065, 2.0374265, 1.07918125]
我想要的是使用 fill_between() 函数,这样填充区域在两个不属于 xdata 列表的 x 值之间,同时填充 y=0 之间的区域,并且提供的 ydata 生成的曲线。
我想到了两件事:1)不关心被 y 数据限制(在这种情况下,我会使用 axvspan() 函数);这不再是一个真正的选择,并且 2) 执行某种插值方案以找到我拥有的 x 值的插值 ydata 值(这又不是 xdata 的一部分)。如果我确实采用第二个想法,我需要知道 matplotlib 在使用 plot() 函数时默认如何在数据点之间进行插值,以便尝试完全匹配 ydata 生成的曲线。
我对插值的想法持开放态度,但我对任何可行的方法都持开放态度。谢谢!
【问题讨论】:
-
什么是“不属于 xdata 列表的两个 x 值”?
-
您能否描述一下您想要的输出与此有何不同? i.stack.imgur.com/4y6pM.png
-
当然,我可以更详细地描述它(它确实与您生成的图像不同)。我们将 x 值称为:x1=13.3979400087 和 x2=13.414973348。基本上,我希望两者之间的填充看起来像您在图像中包含的内容,但是,我希望它从 x 值 x1 开始,并在 x 值 x2 处结束。这更有意义吗?
-
所以基本上裁剪
x1和x2处显示的图像?这相当于使用线性插值(每个数据点之间的直线):plt.fill_between([x1, x2], 0, np.interp([x1, x2], xdata, ydata)
标签: python matplotlib plot