Python 堆叠直方图

Python Stacked Histogram

假设我有这个 pandas 数据框,

    pC  Truth
0   0.601972    0
1   0.583300    0
2   0.595181    1
3   0.418910    1
4   0.691974    1

'pC'是'Truth'为1的概率。'Truth'是二进制值。 我想创建概率直方图,每个箱内的比例为 0 与比例 1。

我尝试了以下方法,

df[['pC','Truth']].plot(kind='hist',stacked=True)

它只是把 'Truth' 值放在 0 和 1 之间。

可重现:

shape = 1000
df_t = pd.DataFrame({'pC': np.random.rand(shape),
                     'Truth':np.random.choice([0,1],size=shape)})
df_t['factor'] = pd.cut(df_t.pC,5)

我该怎么做?谢谢

根据我对你的意思的理解:

  • 创建传统的直方图计数,并为某些 binsize 的概率进行分箱(水平,像往常一样)。仅用于 Truth==0
  • 的数据框
  • 现在用 Truth==1
  • 的 bin 的互补概率值 (1-pC) 扩充该数据框
  • 现在将增强后的 df 绘制为堆叠条形图(大概用白色填充颜色作为互补 Truth==1 条形图)

如果您 post 可重现代码(使用 dput)并且确认这是您想要的,我将 post 代码。否则,post 一个 link 到一些显示你想要的图像。

解决了这个问题
shape = 1000
df_t = pd.DataFrame({'pC': np.random.rand(shape),
                     'Truth':np.random.choice([0,1],size=shape)})
df_t['factor'] = pd.cut(df_t.pC,5)
df_p = (df_t[['factor','Truth']]
        .pivot_table(columns='Truth',index='factor',aggfunc=len,fill_value=0)
        .reset_index())
df_p[['factor',0,1]].plot(kind='bar',stacked=True,x='factor');