Matplotlib-绘制不均匀的线分布

时间:2019-12-01 07:55:42

标签: python matplotlib

考虑以下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坐标的实际分布是​​正态的(我认为)。是否可以填充该区域以反映该区域(以便使颜色越接近mu1越密集)。

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

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

1 个答案:

答案 0 :(得分:0)

可能您可以将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)

这导致: enter image description here

这还没有使用 alpha ,因此它仅对一行有用,也许您可​​以将 alpha 与自定义的色彩图一起使用,但这比较棘手。