考虑下面的matplotlib示例:https://matplotlib.org/3.1.1/gallery/recipes/fill_between_alpha.html

使用fill_between可以显示标准偏差:

ax.fill_between(t, mu1+sigma1, mu1-sigma1, facecolor='blue', alpha=0.5)


但是,该区域被均匀填充,而每个x坐标的实际分布是​​正态的(我认为)。是否可以填充该区域以反映该区域(以使颜色越靠近该点,颜色就越密集)。

您可以假设我有数组mu1mean,它们为每个x坐标定义了一个正态分布,并且我想绘制这些分布:std应该与密度成比例。

作为解决方案,我可能可以使用alpha的多个层,但这并不精确,而且很hacky。

最佳答案

可能可以将filled contour与通过np.meshgridnorm.pdf创建的X,Y,Z数据一起使用。
我删除了fill between example中的fill_between,并添加了以下内容:

import matplotlib.cm as cm
from scipy.stats import norm

width = 2.0
YS = np.linspace(np.min(mu1 - sigma1 * width),
                 np.max(mu1 + sigma1 * width), 101)

X,Y = np.meshgrid(t,YS)
Z = np.zeros_like(X, dtype=np.float)
for i, (mu,sigma) in enumerate(zip(mu1,sigma1)):
    Z[:,i] = norm.pdf(YS, loc=mu, scale=sigma) * sigma

plt.contourf(X,Y,Z, cmap=cm.BuGn, levels=100)


结果是:
python - Matplotlib-绘制不均匀的线分布-LMLPHP

它尚不使用Alpha,因此仅适用于一行,可能您可以将Alpha与自定义色彩图一起使用,但这比较棘手。

关于python - Matplotlib-绘制不均匀的线分布,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59123634/

10-13 08:55