0

我是 matplotlib 和统计的新手。尝试通过以下示例进行学习,并在理解和解决方案方面需要一些帮助。

我在下面添加了条形图图像。我有 1992、1993、1994 和 1995 四年的样本数据。我为它们的均值和误差范围绘制了 4 个条形图。此外,我允许用户绘制一个矩形来选择 y 轴上的范围。这在图像中显示为灰色水平矩形,ymax=46132 和 ymin=37527。现在的任务是将每个条形图与这个 y 轴范围进行比较,并评估每个分布值是否落在 y 轴上选定范围内的概率,并根据底部的颜色图对条形图进行相应的着色。

在此处输入图像描述

我已经使用以下代码来查找此概率,但它没有显示正确的结果。df2 有 4 行,其中包含每个条形的平均值和标准差。ymax=46132 和 ymin=37527。

import pandas as pd
import matplotlib.cm as cm
import scipy.stats as st

cmap = cm.get_cmap('Reds')
df2 = pd.DataFrame(data=[[33312.107476, 200630.901553, 6508.897970],
                         [41861.859541, 98398.356203, 3192.254314],
                         [39493.304941, 140369.925240, 4553.902287],
                         [47743.550969, 69781.185469, 2263.851744]],
                   columns=['mean', 'std', 'MoE'],
                   index=['1992', '1993', '1994', '1995'])
ymax = 46132
ymin = 37527

for i in range(len(df2)):
    cdf_value = (st.norm(df2.iloc[i]['mean'], df2.iloc[i]['std']).cdf(ymax) - 
                 st.norm(df2.iloc[i]['mean'], df2.iloc[i]['std']).cdf(ymin))
    print(cdf_value)
    clr_shade = cmap(cdf_value)

下面是输出的 cdf 值。所有都接近 0,因此 cmap 为所有条形图呈现浅色。根据我的理解,在图像中当前的 y 轴范围内,1993 年的条形图应该用深色绘制(应该有更高的概率),1992 年和 1995 年用浅色绘制(概率较低),而 1994 年可能会用 -颜色之间。

0.017093796658858795
0.03487664518128952
0.024448867322311274
0.048988004652986805

请帮助我了解我做错了什么以及如何解决这个问题。

4

0 回答 0