在matplotlib中绘制离散计数数据的有界CDF

0 投票
1 回答
1318 浏览
提问于 2025-04-17 08:16

我有一个名为“data”的numpy数组,这个数组里只包含了一些整数计数。现在我还有另一个数组“bins”,我想根据这个数组来制作一个频率图或者累积分布函数(CDF),显示在“data”中有多少比例的条目满足至少有“bins[0]”个计数、至少有“bins[1]”个计数,等等。最后,我想把这个结果做成一个条形图,用matplotlib来实现。举个例子,如果:

data = [1, 4, 5, 10]
bins = [0, 5, 6, 7]

那么结果应该是一个条形图,x轴上显示0、5、6、7,然后y轴显示在“data”中大于等于0的值的比例、然后是大于等于5的值的比例,等等。我该如何在matplotlib中制作这种带有指定区间的“离散”CDF条形图呢?谢谢。

1 个回答

1

如果你在使用matplotlib,我想你也在用numpy,所以你可以遍历一下 bins,计算出有多少 data 的值大于每一个 bin。也就是说,你要对每一个 datadatas 中,以及每一个 binbins 中进行这个比较。

为了实现这个,你可以这样做:

import numpy as np
# turn data into numpy array for easier manipulation
data2 = np.array(data)
n     = len(data2)

# calculate fractions for each bin in bins
# astype('float') because otherwise you end up doing integer arithmetic
fracs = [ sum(data2>=bin).astype('float')/n for bin in bins ]

现在只需要把 binsfracs 画出来,比如:

import matplotlib.pyplot as plt
plt.bar(bins,fracs)
plt.show()

撰写回答