gpt4 book ai didi

python - Matplotlib fill_between() 解决方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:55 25 4
gpt4 key购买 nike

我有一个奇怪的情况,我需要一些帮助。我有以下数据:

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 值(这又不是 xdata 的一部分)的插值 ydata 值。如果我继续使用第二个想法,我需要知道在使用 plot() 函数时 matplotlib 默认情况下如何在数据点之间进行插值,以便尝试与 ydata 生成的曲线完全匹配。

我对插值想法持开放态度,但我真的对任何可行的做法持开放态度。谢谢!

最佳答案

我认为您可能必须进行插值。甚至以某种方式“裁剪”来自

的结果
plt.fill_between(xdata, 0, ydata)

Not cropped

正如上面评论中所讨论的,等同于线性插值(每个数据点之间的直线)。方法如下:

xdata = ...
ydata = ...
xleft, xright = 13.3979400087, 13.414973348
xfill = np.linspace(xleft, xright)
yfill = np.interp(xfill, xdata, ydata)
plt.fill_between(xfill, 0, yfill, color='r')

如果你在原来的基础上这样做,你会看得更清楚: Linear

当然,您可以进行更高级的插值,下一步是样条:

from scipy import interpolate
# same as above ...
yfill_spline = interpolate.spline(xdata, ydata, xfill) #note the different args ordering from np.interp
plt.fill_between(xfill, 0, yfill_spline, color='g')

对于您的示例而言,差异非常细微,因此我放大了填充区域的顶部边缘,但曲率数据越高,您会更容易注意到差异: Linear and Spline

为了进行比较,请参阅使用线性插值与样条插值的未裁剪版本。如果 xleftxright 接近峰值(1112),您会注意到这两种方法之间存在很大差异> 左右)。 Linear and Spline, uncropped

关于python - Matplotlib fill_between() 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23250584/

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