matplotlib.pyplot中的阴影不确定性/误差区域

9
我正在寻找一种在Python中绘制带阴影误差区域而不是误差线的方法。
我知道有一个matplotlib.pyplot.fill_between(),可以用它来构建y方向上的工作区,但这并不包括x方向上的不确定性。
有什么想法吗?不幸的是,我的声望还不足以在这里留下评论。
提前感谢!
编辑 matplotlib.pyplot.fill_betweenx()会导致以下形式: fill_between_problem1 编辑2 此外,我认为这对于完整的不确定性区域是不正确的。下面我画出了我认为是正确形状的图 - 我希望,在这里我没有错... problem_sketch
import numpy as np
import matplotlib.pyplot as plt

x = np.asarray([1.0, 2.0, 3.0, 4.0])
y = np.asarray([1.0, 2.3, 3.0, 4.0])
xerr = np.asarray([0.1, 0.7, 0.1, 0.1])
yerr = np.asarray([0.1, 0.9, 1.2, 0.1])

plt.errorbar(x, y, yerr, xerr)

plt.fill_between(x, y-yerr, y+yerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='none')
plt.fill_betweenx(y,x-xerr, x+xerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='#8F94CC', linewidth=1, linestyle='dashed')

plt.show()
# Red lines added with inkscape.

我也是这么想的。不过,你觉得那个估计有点保守吗?我会尝试找出一种聪明的方法来适应点云的边界曲线。你的截止日期是什么时候? - Schorsch
我稍微调整了一下草图,让它更清晰,并纠正了一些错误。我不认为我的例子是保守的。想象一下完全不相关的带有误差值的点(无论它们来自哪里)。因此,您必须考虑平方误差区域。两个点之间的误差如何传播?最简单的方法是我所描绘的一阶近似法。不要花太多力气在这上面!Python拥有如此多令人难以置信的模块,我无法想象没有针对这种非常基本的问题的解决方案。 - Suuuehgi
1个回答

11
我用fill_betweenx函数使这个工作了:
import numpy as np
import matplotlib.pyplot as plt

x = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0])
xerr = np.asarray([0.2, 0.4, 0.6, 0.8, 1.0])
yerr = np.asarray([0.1, 0.2, 0.3, 0.4, 0.5])

plt.errorbar(x, y, yerr, xerr)

plt.fill_between(x, y-yerr, y+yerr,facecolor='r',alpha=0.5)
plt.fill_betweenx(y,x-xerr,x+xerr,facecolor='b',alpha=0.5)

plt.show()  

这导致产生以下图表:

fill_between, fill_betweenx


编辑

在您的特定示例中,使用以下内容可能已足够:

plt.fill_between(x, y-yerr, y+yerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none')
plt.fill_betweenx(y,x-xerr, x+xerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none')

这样,您就不会有交叉的边缘,从而暴露出这个“折痕”。此外,它可能会产生足够的一条误差带的幻象。但是,您必须同时使用fill_betweenfill_betweenx


谢谢您的回答!但我发现将xerr和yerr放置在一个不确定区域(相同颜色)与边框(edgecolor)中存在困难。这仍会导致干扰。 - Suuuehgi
在帖子中添加了一张图片。您可以在上部看到交叉点。 - Suuuehgi
@smoneck 我理解的对吗:您正在寻找一个信封,其中包含所有平滑带中的错误?或者,例如在您的Anstellwinkel = 0的情节中,您是否希望该带接触y误差?还是该情节的一部分就像您想要的那样? - Schorsch
@smoneck 我会进一步调查这个问题。 - Schorsch
非常感谢您的努力,Schorsch!但是,当我正确时,具有重叠xerr和yerr时,不确定性区域是错误的。我添加了一个问题的绘图,在那里我添加了一条红线,补充了我认为是正确的区域。 - Suuuehgi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接