Python / numpy中带百分比箱的直方图?

时间:2016-03-02 08:57:27

标签: python numpy gnuplot histogram

我需要创建一个包含2D数据集百分比的直方图,如下所示(这基本上是来自各种设备的一组报告,每一行都是一个报告其在给定时间内状态的设备):

# hour # parameter (in percents)
00     10
00     20
00     30
01     40
01     50
...

这样就会出现按小时和百分位数分类的设备报告的堆积直方图摘要,就像下面的gnuplot示例一样,其中的二进制位表示报告所涉及的百分位数(例如0

enter image description here

现在我只考虑创建一个2D数组并将其全部输入gnuplot,如下所示:

#!/usr/bin/python

import numpy as np
import sys

data = np.loadtxt('mac-quality.csv')
out = [ [ 0 for k in xrange(10) ] for i in (xrange(24) ) ]

for i in data:
    hour = i[0].astype(int)
    quality = i[1].astype(int)
    for bin in xrange(10):
        pct = bin * 10
        if quality > pct and quality < (pct + 10):
            print('Data: %s, H: %s Percentile: %s:') % (i, hour, pct)
            out[hour][bin] += 1
# print(out)

从python中生成这些直方图的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这完全使用你的python代码,但用一些Matplotlib库代码扩展它,这通常用于python中的绘图。这通常会替换python中的gnuplot。

import numpy as np
import sys
import matplotlib.pyplot as plt

data = np.loadtxt('mac-quality.csv')
out = [ [ 0 for k in xrange(10) ] for i in (xrange(24) ) ]

# Number of bins you have
nBins = 10

for i in data:
    hour = i[0].astype(int)
    quality = i[1].astype(int)
    for bin in xrange(10):
        pct = bin * 10
        if quality > pct and quality < (pct + 10):
            print('Data: %s, H: %s Percentile: %s:') % (i, hour, pct)
            out[hour][bin] += 1


plt.hist(data, nBins, normed=1, histtype='bar', stacked=True)
plt.title('Some Title')
plt.show()