2013-11-21 169 views
3

我想要一条曲线的曲线说x^5 + x^4 + x^3 + x + 1每个点x都取自一个正态分布。 我有一个向量的手段和西格马值向量。绘制一个概率密度

使用matplotlib.pyplot我可以绘制平均值,我可以围绕平均值绘制方差,但看起来不够优雅,并且会使输出杂乱Here dashed yellow line is the variance and red line is the mean

是否有任何其他方式来绘制密度函数?

我用这样的事情:

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是输入数组。

+2

'imshow'? '吧?我们需要更多地了解您的图表,其他元素以及示例的外观。示例代码作为起点也会有所帮助 –

回答

3

最常用的方法是使用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() 

enter image description here

+0

非常感谢。这正是我所期待的 –