我有一个带有unix-timestamps的.csv文件,每个时间戳都描述了服务器上的一个请求。
现在,我想在图表中绘制每分钟/小时的请求数量图表。 像负载图一样。
如何使用gnuplot完成?
答案 0 :(得分:0)
是的,gnuplot可以绘制这样的图表。在您的情况下,我建议使用boxes
绘图样式,与histogram
样式相比,使用传统的数字轴。
要计算每分钟或每小时的请求数,您必须正确地合并时间值。为此,请使用gnuplot提供的tm_*
函数来切断秒或分钟,并将数据正确分组到完整的分钟或整个小时(另请参阅Gnuplot y-axis value from x(dates))。
要分到几分钟,请使用
bin_minutes(t) = t - tm_sec(t)
这只是从原始时间戳中减去秒数。这会将所有值映射为从0到59到同一分钟的秒数。要使框在0到59秒之间正确居中,请添加30秒。
bin_minutes(t) = t - tm_sec(t) + 30
要分到几个小时,请使用
bin_hours(t) = t - tm_min(t)*60 + 30*60 - tm_sec(t)
此外,你必须知道,那个gnuplot 4.6。使用1. Jan 2000作为所有时间函数的参考,gnuplot 5.0使用1. Jan 1970,就像正常的Unix时间戳一样。因此,根据您的gnuplot版本,您必须从Unix时间戳中减去一个偏移量,以获得正确的值(另请参阅我对Can I plot times when they're given as UNIX timestamps with added milliseconds?的回答中的讨论。)
将所有内容放在一起应该提供一个工作脚本(由于您没有发布任何数据,因此无法对其进行测试):
set yrange [0:*]
set xdata time
offset = (GPVAL_VERSION < 5.0 ? 946684800 : 0)
bin_minutes(t) = t - tm_sec(t) + 30
bin_hours(t) = t - tm_min(t)*60 + 30*60 - tm_sec(t)
plot 'file.dat' using (bin_minutes($1-offset)):(1) smooth frequency title 'requests per minute',\
'' using (bin_hours($1-offset)):(1) smooth frequency title 'requests per hour'