python - 在线图上绘制错误阴影带 - python
问题描述
假设我有 25 行这样的:
x = np.linspace(0, 30, 60)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape)
y1 = y+ np.random.normal(0, 0.1, size=y.shape)
y2= y+ np.random.normal(0, 0.1, size=y.shape)
plt.plot(x, y, 'k-')
plt.plot(x, y1, 'k-')
plt.plot(x, y2,'k-')
.
.
.
解决方案
我不太清楚代码示例中的错误变量与 y 变量的变化有何关系。因此,在这里我给出了一个示例,说明如何根据 25 个 y 变量的随机变化来计算和绘制误差带,并使用这些相同的变化在带的顶部创建 y 误差条。相同的逻辑适用于 x 轴上的变化/错误。
让我们首先创建一些随机数据,看看 25 条相似线的折线图是什么样子的:
import numpy as np # v 1.19.2
import matplotlib.pyplot as plt # v 3.3.2
rng = np.random.default_rng(seed=1)
x = np.linspace(0, 5*np.pi, 50)
y = np.sin(x)
# error = np.random.normal(0.1, 0.02, size=x.shape) # I leave this out
nb_yfuncs = 25
ynoise = rng.normal(1, 0.1, size=(nb_yfuncs, y.size))
yfuncs = nb_yfuncs*[y] + ynoise
fig, ax = plt.subplots(figsize=(10,4))
for yfunc in yfuncs:
plt.plot(x, yfunc, 'k-')
plt.show()
我使用的平均值yfuncs
作为基线变量。我提取yfuncs
每个 x 的最小值和最大值来计算误差带。我计算的误差条覆盖的范围与误差带相同。因此,误差相对于平均值是不对称的,这就是为什么它们在绘图函数中作为二维数组输入的原因。误差带用 绘制,fill_between
误差条用绘制errorbar
。代码如下所示:
ymean = yfuncs.mean(axis=0)
ymin = yfuncs.min(axis=0)
ymax = yfuncs.max(axis=0)
yerror = np.stack((ymean-ymin, ymax-ymean))
fig, ax = plt.subplots(figsize=(10,4))
plt.fill_between(x, ymin, ymax, alpha=0.2, label='error band')
plt.errorbar(x, ymean, yerror, color='tab:blue', ecolor='tab:blue',
capsize=3, linewidth=1, label='mean with error bars')
plt.legend()
plt.show()
推荐阅读
- java - 使用肥皂服务的问题。未找到操作的端点参考 (EPR) 是
- c++ - 恐慌:无法加载 dbcapi.dll:
- c++ - 将数据从 Azure 应用服务发送到外部进程
- sql - 如何限制 SQL 存储过程由一个人运行
- reactjs - 为 React 项目维护 monorepo
- apache-kafka - 卡夫卡流时间戳提取器
- java - 单击按钮后在 Java Swing 中的 JTextArea 中显示不同的消息
- php - 加密mysql数据库中的可搜索字段
- c++ - Windows 10 1809 中的可访问性 API 中断
- netbeans-platform - 如何为 nbm maven 插件创建的可执行文件指定元数据