如何使用Gnuplot统计10分钟区间内CSV数据条目并生成柱状图
需求实现结论
该需求可以直接通过Gnuplot实现,无需提前对原始数据做预处理,Gnuplot内置的时间解析、分箱统计能力可直接覆盖该场景,具体实现逻辑如下:
实现步骤
- 第一步:配置Gnuplot识别你的数据格式
你的数据以分号作为分隔符,每行对应完整时间,先配置解析规则:# 指定数据分隔符为分号 set datafile separator ";" # 配置时间格式匹配你的数据结构 set timefmt "%Y-%m-%d;%H:%M:%S" # 开启X轴时间显示模式 set xdata time # 配置X轴时间显示格式,跨天场景也可清晰展示 set format x "%H:%M\n%Y-%m-%d" - 第二步:定义10分钟分箱规则
10分钟对应600秒,将时间转换为秒级时间戳后向下取整到最近的600秒整数倍,即可得到每个时间对应的10分钟区间起始点:# 分箱函数,输入为秒级时间戳,输出对应10分钟区间的起始时间戳 bin(time) = 600 * floor(time / 600) # 可选:调整柱状图宽度,优化显示效果 set boxwidth 0.8 relative set ylabel "事件条目数" set grid y - 第三步:直接读取原始数据绘图
用Gnuplot内置的smooth frequency功能自动统计每个分箱内的条目数,直接生成柱状图:plot "你的数据文件路径.csv" using (bin(timecolumn(1, "%Y-%m-%d;%H:%M:%S"))):(1) smooth frequency with boxes title "10分钟区间事件数"
上述代码直接运行即可得到符合要求的统计结果,无需提前用其他工具对原始CSV做预处理。如果需要调整时间区间的对齐逻辑、柱子样式等,只需要修改对应配置项即可。
内容的提问来源于stack exchange,提问作者Ma Sch
相关产品推荐
相关产品推荐

