我希望曲线的曲线说x^5 + x^4 + x^3 + x + 1
每个点x都取自正态分布。
我有一个手段向量和西格玛值的向量。
使用matplotlib.pyplot
我可以绘制平均值,我可以绘制平均值周围的方差,但它看起来不优雅,并使输出变得杂乱。
有没有其他方法可以绘制密度函数?
我使用过这样的东西:
mu = [mu1, mu2, mu3..]
sigma = [sigma1, sigma2, sigma3..]
variance1 = [mu1+sigma1, mu2+sigma2, ..]
variance2 = [mu1-sigma1, mu2-sigma2,..]
import matplotlib.pyplot as plt
plt.plot(x,mu)
plt.plot(x,variance1, ls = "--")
plt.plot(x,variance2,ls="--")
其中x
是一个输入数组。
答案 0 :(得分:4)
最常见的方法是使用fill_between
来区分置信区间之间的区域。例如:
import numpy as np
np.random.seed(1977)
import matplotlib.pyplot as plt
# Generate data...
x_obs = np.linspace(-2, 2, 20)
true_model = [0.2, -0.1, 4, 2, 1, 0]
noise = np.random.normal(0, 5, x_obs.shape)
y_obs = np.polyval(true_model, x_obs) + noise
# Fit to a 5-th order polynomial
fit_model = np.polyfit(x_obs, y_obs, 5)
x = np.linspace(-3, 3, 100)
y_true = np.polyval(true_model, x)
y_pred = np.polyval(fit_model, x)
# Made up confidence intervals (I'm too lazy to do the math...)
high_bound = y_pred + 3 * (0.5 * x**4 + 3)
low_bound = y_pred - 3 * (0.5 * x**4 + 3)
# Plot the results...
fig, ax = plt.subplots()
ax.fill_between(x, high_bound, low_bound, color='gray', alpha=0.5)
ax.plot(x_obs, y_obs, 'ko', label='Observed Values')
ax.plot(x, y_pred, 'k--', label='Predicted Model')
ax.plot(x, y_true, 'r-', label='True Model')
ax.legend(loc='upper left')
plt.show()