如何使用gnuplot重绘Excel分组直方图并在柱顶显示数值
gnuplot 分组直方图绘制修正方案
分组错误原因
你当前脚本未跳过前两行表头,默认将表头行识别为数据行,同时未配置直方图分组间距,导致不同Area的柱子没有明确分组边界。
完整可运行脚本
直接使用你已有的date_mins.tsv文件不需要修改,运行以下脚本即可得到和Excel一致的分组效果,同时自动在柱顶添加数值标签:
clear reset # 适配Windows系统字体,避免显示异常 set font 'Microsoft YaHei,10' set key top left # 配置直方图分组样式:集群模式,组间间距1.5,组内间距0.2 set style histogram clustered gap 1.5 set style data histogram set style fill solid 0.8 border lc black # 轴标签配置 set xlabel '参数项' set ylabel '数值' # 预留Y轴顶部空间放数值标签 set yrange [0:110] # 绘图命令 plot \ # 绘制4组柱子,every ::2 跳过前2行表头,xticlabels取第一列作为X轴刻度 'date_mins.tsv' every ::2 using 2:xticlabels(1) title 'Area1-Case1' lc rgb '#4472c4', \ '' every ::2 using 3 title 'Area1-Case2' lc rgb '#5b9bd5', \ '' every ::2 using 4 title 'Area2-Case1' lc rgb '#ed7d31', \ '' every ::2 using 5 title 'Area2-Case2' lc rgb '#ffc000', \ # 叠加柱顶数值标签,offset控制标签在柱子上方的偏移量 '' every ::2 using 0:2:(sprintf("%d", $2)) with labels offset 0,0.7 notitle, \ '' every ::2 using 1:3:(sprintf("%d", $3)) with labels offset 0,0.7 notitle, \ '' every ::2 using 2:4:(sprintf("%d", $4)) with labels offset 0,0.7 notitle, \ '' every ::2 using 3:5:(sprintf("%d", $5)) with labels offset 0,0.7 notitle
自定义调整说明
- 若需要调整分组间距,修改
set style histogram clustered gap 1.5中的gap值即可,数值越小组间距越小 - 若需要修改柱子颜色,调整
lc rgb后的色值即可,可直接使用Excel对应柱子的十六进制色值 - 若需要添加第二层X轴分组标注(对应Area维度),可在脚本中添加如下配置:
set x2tics axis in scale 0 nomirror ("Area1" 1.5, "Area2" 3.5) set x2label '区域'
内容的提问来源于stack exchange,提问作者user157522
相关产品推荐
相关产品推荐

