使用Gnuplot绘制成对堆叠柱状图的技术实现问询
Gnuplot实现成对堆叠柱状图方案
我来帮你搞定这个成对堆叠柱状图的需求!下面是完整的实现脚本和细节说明,完全匹配你要的「每个x刻度位置展示一对垂直堆叠柱(左侧#类堆叠、右侧%类堆叠)」的效果,而且考虑到两类数据量级差距大的问题,我还加了双y轴优化,让两类数据都能清晰展示。
第一步:整理数据集
首先把你给的数据整理成结构化的文本文件(比如命名为data.txt),每行对应一个x轴分组,格式如下:
# 表头:Min# Max# Avg# Min% Max% Avg% 6 12 6.67 13 100 35.25 0 6 3 0 90 43.25 235 1243 553 66.67 100 83.43
第二步:Gnuplot脚本实现
创建一个脚本文件(比如stacked_pair_plot.gp),内容如下,每部分都加了注释方便你理解:
# 设置输出终端和图片尺寸(可以根据需求调整,比如换成png/pdf) set terminal pngcairo size 1000,600 enhanced font 'Arial,10' set output 'stacked_pair_histogram.png' # 设置图表标题和坐标轴标签 set title "每组#类与%类数值堆叠对比" font 'Arial,12' set xlabel "分组" font 'Arial,10' set ylabel "#类数值(Min/Max/Avg)" font 'Arial,10' set y2label "%类数值(Min/Max/Avg)" font 'Arial,10' # 启用双y轴,左侧y轴对应#类,右侧y轴对应%类 set ytics nomirror # 左侧y轴不镜像显示到右侧 set y2tics # 显示右侧y轴刻度 # 设置柱状图样式:聚类分组(每组两个堆叠柱)+ 填充样式 set style histogram clustered gap 2 # gap控制组与组之间的间距 set style data histogram set style fill solid 0.7 border -1 # 填充透明度+边框 set boxwidth 0.35 # 单个堆叠柱的宽度 # 设置x轴刻度标签,对应三个数据分组 set xtics ("Group 1" 1, "Group 2" 2, "Group 3" 3) # 绘制堆叠柱状图: # 第一部分:#类堆叠(Min#/Max#/Avg#),使用左侧y轴 # 第二部分:%类堆叠(Min%/Max%/Avg%),使用右侧y轴,通过offset移到#类右侧组成一对 plot 'data.txt' using 1:xtic(0) title 'Min #' axis x1y1, \ '' using 2 title 'Max #' axis x1y1, \ '' using 3 title 'Avg #' axis x1y1, \ '' using 4:offset(0.5,0) title 'Min %' axis x1y2, \ '' using 5:offset(0.5,0) title 'Max %' axis x1y2, \ '' using 6:offset(0.5,0) title 'Avg %' axis x1y2
关键细节解释
- 双y轴设置:因为#类数值(比如第三组Max#达到1243)和%类数值(最高100)量级差距极大,单y轴会导致%类柱子几乎不可见,所以用双y轴分别适配两类数据。
- 聚类与偏移:
set style histogram clustered让每个x刻度位置可以容纳多个柱状组,通过offset(0.5,0)把%类堆叠柱整体右移,和左侧的#类堆叠柱组成一对。 - 堆叠逻辑:Gnuplot的histogram样式默认会把同组的多个
plot序列堆叠在一起,所以依次绘制Min#、Max#、Avg#就会自动形成堆叠效果,%类同理。
运行方式
把data.txt和stacked_pair_plot.gp放在同一目录下,打开终端执行:
gnuplot stacked_pair_plot.gp
就能生成名为stacked_pair_histogram.png的柱状图了。
你可以根据自己的需求调整终端类型(比如换成pdfcairo生成PDF)、颜色(可以在set style fill后加rgb "#xxxxxx"指定颜色)、字体、尺寸等参数。
内容的提问来源于stack exchange,提问作者Fledgling Pidgeon
相关产品推荐
相关产品推荐

