2

我试图在其他一些图表之上绘制一个事件的发生,这些图表显示了一个进程需要多少时间来查看是否存在相关性,但我无法弄清楚如何让 gnuplot 正确地对数据求和。由于数据不是数字的,我在应用与绘制直方图相关的材料时遇到了麻烦。这是我的数据:

"2012-05-15 08:12:49","foo"
"2012-05-15 08:13:01","foo"
"2012-05-15 08:13:58","foo"
"2012-05-15 08:14:03","foo"
"2012-05-15 08:14:10","foo"
"2012-05-15 08:14:17","foo"
"2012-05-15 08:14:33","foo"
"2012-05-15 08:14:35","foo"

...

"2012-05-15 10:31:51","foo"
"2012-05-15 10:32:02","foo"
"2012-05-15 10:32:03","foo"
"2012-05-15 10:32:07","foo"
"2012-05-15 10:32:09","foo"
"2012-05-15 10:32:15","foo"

这是数据文件的范围,我想要一个带有一条线的图表,表示当时发生了多少事件

(所以我可以将它覆盖到我的另一个绘制了处理时间的图上)

这可能吗?

编辑:到目前为止,我已经尝试了几种选项组合,但都没有产生任何可读的图形,是我正在使用的 gnuplot 文件,type1.csv并且type2.csv来自我正在覆盖的图形。small_report.csv 是“发生”数据的 1000 行提取。

4

2 回答 2

3

对我来说,这里的诀窍是记住在对 x 轴(分箱)进行数学运算时使用 timecolumn()。

set xdata time
set timefmt "[%Y-%m-%y %H:%M:%S"
binwidth = 30  #30 second bin
bin(x,width) = width*floor(x/width)
plot "testdata.log" using (bin(timecolumn(1),binwidth)):(1.0) smooth frequency with boxes

上面的示例对给定 binwidth 内的事件求和,并将它们绘制在时间线上。

$gnuplot --version
gnuplot 4.6 patchlevel 4
于 2016-04-26T10:54:44.063 回答
2

使用 python 2.7 计算特定日期出现的次数非常容易:

from collections import Counter
with open('datafile') as fin:
    c = Counter(line.split()[0][1:] for line in fin)

for k,v in sorted(c.items()):
    print k,v

如果你没有 python 2.7,你可以defaultdict在早期版本中模仿这个:

from collections import defaultdict
with open('datafile') as fin:
    c = defaultdict(int)
    for line in fin:
        c[ line.split()[0][1:] ] += 1

for k,v in sorted(c.items()):
    print k,v

现在您可以使用它来绘制图:

set timefmt '%Y-%m-%d'
set xdata time
plot "<python pythonscript.py" u 1:2
于 2012-12-04T16:46:54.723 回答