如何使用Gnuplot绘制智能燃气表小时耗气量柱状图?
实现小时天然气消耗量柱状图的方法
要从累计数据生成小时消耗量柱状图,需先计算每个小时的天然气使用量(该小时结束累计值减去开始累计值),再用Gnuplot绘制柱状图。以下是具体步骤和脚本:
完整实现脚本
# 预处理数据:计算每小时消耗量并按时间排序 awk -F';' ' NR == 1 { next } # 跳过表头行 { # 生成日期+小时的分组标识 hour_group = $1 ";" substr($2, 1, 2) # 记录该小时的首个和末次累计值 if (!first_val[hour_group]) first_val[hour_group] = $3 last_val[hour_group] = $3 } END { print "date_time;hourly_consumption" for (group in first_val) { split(group, parts, ";") date = parts[1] hour = parts[2] # 计算小时消耗量 usage = last_val[group] - first_val[group] # 输出格式化的时间与消耗量 printf "%s;%s:00;%.3f\n", date, hour, usage } }' /home/pi/p1_data.csv | sort > /tmp/hourly_gas_data.csv # 用Gnuplot绘制柱状图 gnuplot << eor set xtics rotate 45 # 旋转x轴标签避免重叠 set y2tics set grid ytics mytics xtics set mytics 2 set grid set xdata time set timefmt '%Y-%m-%d;%H:%M' set datafile separator ';' set terminal pngcairo size 1400,600 enhanced font 'Helvetica,12' set output '/dev/shm/images/p1_hourly_gas.png' # 配置柱状图样式 set style data boxes set style fill solid 0.7 # 设置柱子填充透明度 set boxwidth 0.8 relative # 调整柱子宽度适配时间轴 set title "每小时天然气消耗量" set xlabel "时间" set ylabel "小时耗气量 (m³)" # 绘制预处理后的小时数据 plot '/tmp/hourly_gas_data.csv' using 1:3 title "小时消耗量" linecolor rgb "orange-red" eor # 清理临时文件 rm /tmp/hourly_gas_data.csv
关键说明
- 数据预处理:通过
awk遍历原始数据,按小时分组计算消耗量,排序后保证时间顺序,避免绘图时出现乱序。 - Gnuplot配置:
set style data boxes指定绘制柱状图boxwidth设置为相对宽度,适配时间轴的间隔- 旋转x轴标签解决整月数据标签拥挤问题
- 时间格式与预处理输出匹配,确保x轴按时间顺序排列
内容的提问来源于stack exchange,提问作者WOU
相关产品推荐
相关产品推荐

