gpt4 book ai didi

python - matplotlib fill_ Between 留下间隙

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

我正在尝试重新创建seaborn的fill-only confidence interval plotting在原始 matplotlib 中。这样做时,我遇到了奇怪的行为,其中 fill_ Between 函数在它应该填充的内容之间留下了间隙。

我使用的是真实世界的数据,但它是表现良好的数据:x 值的范围约为 0-15,y 值的范围约为 25-85。我使用 statsmodels 来拟合直线并生成置信区间,基本上为 the code from this prior SO ,并且拟合值以及置信区间的上下限都是应有的(范围适当等)。所以数据没有问题。

这是代码的相关部分:

def make_plot(x, y):
fig = plt.figure(figsize=(12, 9))
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y, 'k.', ms=5)
ax.locator_params(nbins=3)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
regline = sm.OLS(y,sm.add_constant(x)).fit()
fitted = regline.fittedvalues
ax.plot(x, fitted, color=(0.2, 0.2, 0.2, 0.2), linewidth=2)
ci_low, ci_high = get_ci_values(regline)
ax.fill_between(x, ci_low, fitted, facecolor=(0.4, 0.4, 0.9, 0.2))
ax.fill_between(x, ci_high, fitted, facecolor=(0.9, 0.4, 0.4, 0.2))
return fig

线填充工作正常,直到达到 x=10、y=50 左右,然后开始留下奇怪的间隙,而不会一直到达回归线。这是一个例子:

image with horrible gap

我在这里做错了什么?我尝试了很多东西,包括:

  • 添加低置信区间和高置信区间的线

  • interpolate=True 添加到 fill_ Between 调用

  • where=x>0 添加到 fill_ Between 调用

但这些都没有任何区别。

我还注意到seaborn manages使用 fill_ Between 进行漂亮的填充,使用完全相同的策略,并且seaborn的绘图在我正在使用的数据上正确工作......

最佳答案

人们无法确定,因为问题缺少关键部分,即数据本身(请参阅 Minimal, Complete, and Verifiable example )。

但是,这里强烈怀疑数据未排序

(未经测试的)解决方案是对数据进行排序,

ax.plot(np.sort(x), fitted[np.argsort(x)])
ax.fill_between(np.sort(x), ci_low[np.argsort(x)], fitted[np.argsort(x)])

要理解为什么需要对值进行排序,也许一张图片可以解释一千个单词。

enter image description here

关于python - matplotlib fill_ Between 留下间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197738/

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