gnuplot中如何在3D热力图上绘制固定z值填充区域
Gnuplot 3D热力图叠加固定Z高度填充区域实现方法
splot 模式下原生filledcurve默认逻辑是将数据点与z=0基准面连接绘制竖线,这也是执行splot 'data' u 1:2:(1) w filledcurve后只出现沿z轴线条的原因,不会直接生成平面内填充效果。以下两种方法可实现需求:
方法一:全版本兼容方案(适配所有gnuplot版本,稳定性最高)
核心思路是先在2D模式下生成填充多边形的顶点数据,再映射到指定z高度用多边形绘制:
- 第一步预处理填充轮廓数据:示例给出的轮廓数据首尾点不闭合(最后一个点坐标为
139.62999 0.31216,与第一个点118.01363 0.31794不重合),在数据文件末尾追加一行第一点的坐标,保证填充轮廓闭合无缺口。 - 第二步导出2D填充多边形顶点到临时文件,执行以下命令:
set table 'fill_poly_tmp.dat' plot 'your_contour.dat' w filledcurve unset table
- 第三步回到3D pm3d绘图模式,将导出的多边形顶点固定到目标z高度,叠加在热力图上层即可,示例代码:
set pm3d # 调整层级保证填充区域显示在热力图上方 set pm3d depthorder splot 'your_3d_heatmap.dat' w pm3d, \ 'fill_poly_tmp.dat' u 1:2:(1) w polygons fc rgb "#80FF0000" fs solid 0.5 t "标记区域"
fs solid 0.5用于设置填充透明度为50%,避免完全遮挡下层热力图,可根据需求调整数值fc rgb "#80FF0000"为填充颜色设置,可自定义色值- 若填充区域仍被热力图遮挡,可在多边形绘制参数后加
front关键字强制置顶
方法二:高版本简便方案(gnuplot 5.4及以上版本可用)
gnuplot 5.4版本开始为3D模式下的filledcurves新增了固定z平面参数,无需导出临时文件,直接在绘图命令中指定z高度即可。同样先把轮廓数据补成闭合状态,直接执行绘图命令:
set pm3d set pm3d depthorder splot 'your_3d_heatmap.dat' w pm3d, \ 'your_closed_contour.dat' u 1:2:(1) w filledcurves z=1 fc rgb "#8000FF00" fs solid 0.5 t "标记区域"
注意必须显式添加
z=1参数指定填充所在平面,缺省该参数时会触发默认的z=0竖线绘制逻辑,无法得到正确填充效果。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

