在matplotlib中绘制离散计数数据的有界CDF
我有一个名为“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
。也就是说,你要对每一个 data
在 datas
中,以及每一个 bin
在 bins
中进行这个比较。
为了实现这个,你可以这样做:
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 ]
现在只需要把 bins
和 fracs
画出来,比如:
import matplotlib.pyplot as plt
plt.bar(bins,fracs)
plt.show()