python - 使用 matplotlib 填充平均值和曲线波动?

标签 python matplotlib

我们如何绘制一条曲线,其中我们有多种实现方式,如下图所示。
enter image description here
我的尝试:我试图创造一些模仿上图中曲线的东西。

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
x = np.repeat(np.linspace(0,10, 10)[np.newaxis,...], 5, axis=0)
s = np.diag(np.array([0.05, 0.1, 0.3, 0.01, 0.2]))
y =  1- np.sqrt(x) + np.matmul(np.diag(np.array([0.05, 0.1, 0.3, 0.01, 0.2])),np.random.randn(x.shape[0],x.shape[1]))
fig, ax = plt.subplots()
for i in range(5):
  ax.plot(x[i,:],y[i,:])
plt.show()
我不知道怎么走得更远。
注:下图中的五条曲线应转换为一条均值位于中间且被波动掩盖的曲线。
enter image description here

最佳答案

生成要绘制的实体(均值和波动曲线),然后绘制它们。
使用 matplotlib.pyplot.fill_between填充两条曲线之间的区域。

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
x = np.repeat(np.linspace(0,10, 10)[np.newaxis,...], 5, axis=0)
s = np.diag(np.array([0.05, 0.1, 0.3, 0.01, 0.2]))
y =  1- np.sqrt(x) + np.matmul(np.diag(np.array([0.05, 0.1, 0.3, 0.01, 0.2])),np.random.randn(x.shape[0],x.shape[1]))

for i in range(5):
  plt.plot(x[i,:],y[i,:], ms=4, marker='o')

y_mean = np.mean(y, axis=0)
y_std = np.std(y, axis=0)
y_std_up = y_mean + y_std
y_std_low = y_mean - y_std
print(y_mean.shape)

plt.plot(x[0,:], y_mean, 'k' , ms=4, marker='o')
plt.fill_between(x[0,:], y_std_low,y_std_up, alpha=.5, color='k', lw=0)
enter image description here

关于python - 使用 matplotlib 填充平均值和曲线波动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66685451/

相关文章:

python - 如何有条件地标记组?

python - Pandas 分组并按索引计数排序

python - 为什么 Python ggplot 返回名称 'aes' 未定义?

python - 非常基本的 Python 文本冒险

python - 如何将 matplotlib 补丁定位在轴范围之外(以便它可以位于标题、图例或图形的任何位置旁边)

python - 带有多行文本的 PyLab 标题/图例标签

python - 如何从频谱图中提取numpy数组特征?

python - pyglet仅播放来自同一目录的声音

python - 循环中的 Matplotlib 传奇?

pandas - 将索引转换为名称 pandas 以进行绘图