【问题标题】:Percentage ratio within each bin in stacked histogram堆叠直方图中每个 bin 内的百分比
【发布时间】:2020-09-21 07:33:30
【问题描述】:

我有一个堆叠直方图对应三个类别(Cat-I、II、III),这样在每个 bin 中我可以看到每个类别的频率。我希望 Y 轴显示每个 bin 中每个类别的百分比,以便每个 bin 中三个类别的比率加起来为 1。我尝试了以下方法来获取堆叠直方图,任何帮助调整代码以便我可以显示百分比将不胜感激。我知道设置 density=True 会给出概率密度,但我不是在寻找它。

import numpy as np
import matplotlib.pyplot as plt
data1=np.loadtxt('C:/Users/Hrihaan/Desktop/Cat-I.txt')
data2=np.loadtxt('C:/Users/Hrihaan/Desktop/Cat-II.txt')
data3=np.loadtxt('C:/Users/Hrihaan/Desktop/Cat-III.txt')
x1=data1[:,1]
x2=data2[:,1]
x3=data3[:,1]
bins= 8
bins_list = [301, 340, 372, 405, 431, 472, 514, 599, 949] # I defined the bins range so that I have bins of equal elements, the first 7 bins all have 23 elemnets where the last has 24
plt.hist([x1,x3,x2], bins=bins_list, histtype='bar', color=["mediumspringgreen", "pink", "lightskyblue"], stacked=True, edgecolor='dimgrey', linewidth=20, density=False)  

【问题讨论】:

  • 您的示例并不是真正的工作示例,因为我们无权访问您计算机中的文件。
  • 我编辑了文本。

标签: python numpy matplotlib histogram bins


【解决方案1】:

您可以先使用 qcut 将 x1、x2 和 x3 数据转换为各自的 bin,然后通过除以每个 bin 的总数来获得百分比。说 x1[0]/(x1[0]+x2[0]+x3[0])

pd.qcut(x1, q=bins_list, labels=False)

【讨论】: