我想使用 Matplotlib 绘制一个已经被预先计数的数据的直方图。例如,假设我有原始数据
data = [1, 2, 2, 3, 4, 5, 5, 5, 5, 6, 10]
根据这些数据,我可以使用
pylab.hist(data, bins=[...])
绘制直方图。
在我的情况下,数据已经预先计数并表示为字典:
counted_data = {1: 1, 2: 2, 3: 1, 4: 1, 5: 4, 6: 1, 10: 1}
理想情况下,我希望将这些预先计算的数据传递给一个直方图函数,让我能够像传递原始数据一样控制区间宽度、绘图范围等。 但现在我正在使用一种替代方法,将我的计数值扩展为原始数据:
data = list(chain.from_iterable(repeat(value, count)
for (value, count) in counted_data.iteritems()))
如果counted_data
包含数百万个数据点的计数,这种方法效率低下。
是否有更简单的方式使用Matplotlib从预先计算好的数据生成直方图?
或者,如果将预先分组的数据作为条形图绘制最容易,是否有一种方便的方法将每个项目的计数“卷起来”成为分组计数?
Counter
类及其elements()
方法:from collections import Counter
c = Counter(counted_data)
data = list(c.elements())
- Moncef M.