我们如何绘制一条曲线,其中我们有多种实现方式,如下图所示。
我的尝试:我试图创造一些模仿上图中曲线的东西。
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()
我不知道怎么走得更远。注:下图中的五条曲线应转换为一条均值位于中间且被波动掩盖的曲线。
最佳答案
生成要绘制的实体(均值和波动曲线),然后绘制它们。
使用 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)
关于python - 使用 matplotlib 填充平均值和曲线波动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66685451/