如何用gnuplot绘制带重叠透明效果的直方图?
在Gnuplot中实现重叠透明柱状图的方法
你遇到的问题核心在于gnuplot的histogram样式本质是为聚类或堆叠场景设计的,没法直接实现重叠显示+透明填充的效果。想要达到你要的效果,我们可以放弃histogram模式,改用boxes绘图类型来手动控制柱子的位置和透明度,具体方案如下:
关键思路
- 用
boxes替代histogram:histogram的clustered模式只是让柱子紧密排列而非重叠,rowstacked会堆叠数值,都不符合你的需求;而boxes允许我们直接指定每个柱子的x轴位置,轻松实现重叠。 - 保持半透明填充:通过
set style fill solid <alpha>设置透明度,数值越小(0到1之间)越透明,0.5是比较适中的半透明效果。
修改后的完整代码
set boxwidth 0.8 absolute # 调整柱子宽度,0.8能让重叠的柱子保留部分边界,更易区分 set style fill solid 0.5 noborder # 半透明填充,去掉边框让重叠效果更自然 set xtics in rotate by 90 offset first +0.5,0 right set yrange [0:8000] set xrange [90:180] # 直接用boxes绘制,每个数据文件的柱子都对应相同的x轴位置(假设你的数据第一列是x值) plot 'dat1.raw' using 1:3 lc rgb 'orange' with boxes, \ 'dat2.raw' using 1:3 lc rgb 'blue' with boxes, \ 'dat3.raw' using 1:3 lc rgb 'magenta' with boxes
细节调整
- 如果想要完全重叠的效果,可以把
boxwidth设为1.0;如果希望柱子部分重叠且保留更多独立视觉空间,可以把数值调小(比如0.6)。 - 如果你原来的histogram是基于分类而非连续x值,只需要确保每个数据文件对应的x分类位置一致即可,比如用
using ($0+1):3来指定分类的x坐标($0是数据行索引)。
这样调整后,你就能得到带透明填充的重叠柱状图,完全符合你的需求啦。
内容的提问来源于stack exchange,提问作者Gert Gottschalk




