Gnuplot:在同一张图表中组合分组直方图与行堆叠直方图样式
当然可以!Gnuplot完全支持把分组直方图和堆叠直方图结合起来,这种“分组堆叠直方图”刚好能满足你的需求——每个分组下有多个柱形,每个柱形又拆分成两个堆叠部分。下面我给你一步步讲怎么实现,附完整代码示例:
核心思路
Gnuplot没有直接的“一键组合”命令,但可以通过**分组直方图(clustered)配合行堆叠(rowstacked)**的plot逻辑来实现:我们先为每个分组里的每个柱形绘制底层数据,再把上层数据堆叠在对应位置上,同时让同组的柱形保持聚类排列。
步骤1:准备数据文件
假设你有5个x轴分组,每个分组下有3个柱形,每个柱形包含2个堆叠数据。可以把数据整理成如下格式(保存为stacked_clustered.dat):
# 格式:分组名 柱形1-数据1 柱形1-数据2 柱形2-数据1 柱形2-数据2 柱形3-数据1 柱形3-数据2 Group1 10 5 12 4 8 3 Group2 15 7 9 6 11 5 Group3 8 4 14 6 9 2 Group4 12 6 10 5 13 7 Group5 9 3 11 4 15 6
步骤2:编写Gnuplot代码
下面是完整的配置和绘图代码,我会标注关键参数的作用:
# 设置输出终端和文件(可以换成pdf、svg等格式) set terminal pngcairo enhanced font 'Arial,10' set output 'grouped_stacked_hist.png' # 核心样式配置 set style data histogram # 指定用直方图样式绘图 set style histogram clustered gap 1 # 开启分组模式,gap控制分组间的间距 set style fill solid border -1 # 柱形填充为实心,带边框 set boxwidth 0.8 relative # 调整柱形宽度,避免过于拥挤 # 坐标轴和标题设置 set xtics rotate by 45 right # 旋转x轴标签,防止重叠 set ylabel '数值' set title '分组堆叠直方图示例' # 绘制堆叠分组直方图 plot 'stacked_clustered.dat' using 2:xtic(1) title '柱形A - 数据集1' linecolor rgb '#1f77b4', \ '' using 3 title '柱形A - 数据集2' with histogram rowstacked linecolor rgb '#aec7e8', \ '' using 4 title '柱形B - 数据集1' linecolor rgb '#ff7f0e', \ '' using 5 title '柱形B - 数据集2' with histogram rowstacked linecolor rgb '#ffbb78', \ '' using 6 title '柱形C - 数据集1' linecolor rgb '#2ca02c', \ '' using 7 title '柱形C - 数据集2' with histogram rowstacked linecolor rgb '#98df8a'
关键参数解释
set style histogram clustered gap 1:开启分组模式,gap值越大,分组之间的空隙越宽。with histogram rowstacked:这个选项告诉Gnuplot,把当前数据集堆叠在同一位置的前一个柱形上,实现堆叠效果。using 2:xtic(1):指定第一列作为x轴的分组标签,第二列作为当前数据集的数值。linecolor rgb:手动指定填充颜色,让不同堆叠层和分组柱形更易区分。
调整技巧
- 如果觉得分组太挤,可以减小
boxwidth的值(比如0.7);如果想让分组更分散,增大gap的值(比如2)。 - 若需要更多堆叠层,只需要在数据文件中增加对应列,然后在
plot命令里追加一行'' using X title 'xxx' with histogram rowstacked即可。 - 可以用
set key outside把图例移到图表外部,避免遮挡柱形。
内容的提问来源于stack exchange,提问作者goodmorning
相关产品推荐
相关产品推荐

