如何在gnuplot的2D强度图上添加图案填充遮罩(边界区域)
解决方案:用Gnuplot叠加强度图与不可访问区域填充
我之前也碰到过类似的需求,用Gnuplot的图层叠加+条件筛选就能完美解决,具体步骤和命令如下:
1. 基础参数配置(可选但推荐)
先做一些基础设置,保证绘图比例、颜色适配你的数据场景:
# 设置正方形画布,避免图像被拉伸变形 set size square # 自动从掩码文件读取最大x/y值,不用手动输入范围 stats 'mask.dat' nooutput set xrange [0:STATS_max_x] set yrange [0:STATS_max_y] # 自定义强度图的调色板(可根据你的数据区间调整颜色) set palette defined (0 "white", 30 "cyan", 70 "orange", 100 "darkred") set cblabel "Diffusion Intensity" # 给颜色条加标签
2. 核心叠加绘图命令
用一条plot命令同时绘制两层内容:底层的强度彩色图,上层的不可访问区域填充图案:
plot \ # 第一层:绘制物质扩散的强度图,沿用你原来的命令逻辑 'data.dat' using 1:2:3 with image notitle, \ # 第二层:筛选并填充不可访问区域(value=1的部分) 'mask.dat' using 1:2:(1):(1):4 \ with boxes \ fs pattern 6 lc "gray" alpha 0.6 \ # 图案样式、颜色、透明度 notitle \ where ($4 == 1) # 只处理掩码文件中value为1的区域
关键参数说明
using 1:2:(1):(1):4:前两列对应x/y坐标,(1):(1)是填充方块的宽高(如果你的网格步长不是1,替换成实际步长即可),第4列是掩码的value值。fs pattern 6:选择第6种填充图案(Gnuplot支持1-9号不同图案,可自行测试替换数字找喜欢的样式)。alpha 0.6:设置图案透明度,避免完全盖住下层的强度图,方便同时观察扩散强度和不可访问区域。where ($4 == 1):精准筛选出不可访问区域,跳过value=0的可访问区域。
额外优化小技巧
- 如果你的坐标是网格中心而非左下角,可给x/y坐标加0.5偏移,让方块对齐网格:
using ($1+0.5):($2+0.5):(1):(1):4。 - 想给填充图案加边框的话,可提前加一句:
set style fill pattern 6 border lt -1。
内容的提问来源于stack exchange,提问作者Learning from masters
相关产品推荐
相关产品推荐

