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');
假设我有这个 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 的互补概率值 - 现在将增强后的 df 绘制为堆叠条形图(大概用白色填充颜色作为互补
Truth==1
条形图)
(1-pC)
扩充该数据框
如果您 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');