我需要创建一个包含2D数据集百分比的直方图,如下所示(这基本上是来自各种设备的一组报告,每一行都是一个报告其在给定时间内状态的设备):
# hour # parameter (in percents)
00 10
00 20
00 30
01 40
01 50
...
这样就会出现按小时和百分位数分类的设备报告的堆积直方图摘要,就像下面的gnuplot示例一样,其中的二进制位表示报告所涉及的百分位数(例如0 现在我只考虑创建一个2D数组并将其全部输入gnuplot,如下所示: 从python中生成这些直方图的正确方法是什么?#!/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 :(得分: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()