Gnuplot 从时间戳csv打印每分钟的请求数

Gnuplot 从时间戳csv打印每分钟的请求数,gnuplot,Gnuplot,我有一个带有unix时间戳的.csv文件,每个时间戳描述服务器上的一个请求 现在,我想绘制一张图表,显示图表中每分钟/小时的请求数。 就像一个负载图 如何使用gnuplot实现这一点?是的,gnuplot可以绘制这样的图表。在您的案例中,我建议使用框打印样式,与直方图样式相比,它使用传统的数字轴 要计算每分钟或每小时的请求数,必须正确存储时间值。为此,请使用gnuplot提供的tm*功能,切断秒数或分钟数,并将数据正确存储到整分钟或整小时(另请参阅) 要存储到分钟,请使用 bin_minutes

我有一个带有unix时间戳的.csv文件,每个时间戳描述服务器上的一个请求

现在,我想绘制一张图表,显示图表中每分钟/小时的请求数。 就像一个负载图


如何使用gnuplot实现这一点?

是的,gnuplot可以绘制这样的图表。在您的案例中,我建议使用
打印样式,与
直方图
样式相比,它使用传统的数字轴

要计算每分钟或每小时的请求数,必须正确存储时间值。为此,请使用gnuplot提供的
tm*
功能,切断秒数或分钟数,并将数据正确存储到整分钟或整小时(另请参阅)

要存储到分钟,请使用

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)
此外,您必须知道,gnuplot4.6。使用1。2000年1月作为所有时间函数的参考,gnuplot 5.0使用1。1970年1月,与普通Unix时间戳类似。因此,根据您的gnuplot版本,您必须从Unix时间戳中减去一个偏移量,以获得正确的值(另请参见我对的回答中的讨论)

把所有这些放在一起应该会产生一个工作脚本(由于您没有发布任何数据,所以无法测试):

设置Y范围[0:]
设置扩展数据时间
偏移量=(GPVAL_版本<5.0?946684800:0)
本分钟(t)=t-tm秒(t)+30
本小时(t)=t-tm分钟(t)*60+30*60-tm秒(t)
使用(bin_minutes($1-offset))绘制“file.dat”:(1)平滑频率标题“每分钟请求数”\
“”使用(bin_hours($1-offset)):(1)平滑频率标题“每小时请求”
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'