2016-03-02 105 views
1

我需要从2D组数据创建个段的直方图,像这样的(这基本上是一组来自不同设备的报告,每行报告其状态某个小时的设备):在Python/numpy中使用百分比箱子的直方图?

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

所以会有由小时和百分分级,就像下面的gnuplot的示例设备的报告一个叠加柱状图总结,与代表百分仓的报告落入(比如说0 <ř< 10%,10% < r < 20%等等)。

enter image description here

现在我只想到了创建一个二维数组和喂养这一切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) 

什么是蟒蛇内产生这些直方图的正确方法?

+0

你可以提供'cvs'数据的exceprt吗? –

回答

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() 
+0

不完全是这样,它绘制了按百分比分类的数据,而我想要一个堆积的百分比直方图在一小时内分级(小时是X轴,百分位数是堆积的直方图条内的分箱)。但是,谢谢,这是一个好的开始。 –