如何用gnuplot基于三角形网格数据绘制正确的2D热力图?
解决gnuplot绘制三角形网格热力图的问题
核心问题分析
你之前的尝试未成功,核心是对gnuplot处理多边形填充的逻辑理解有误:
pm3d默认针对四边形网格设计,不指定三角形模式的话,程序无法正确识别三角形填充区域;- 修改后的
file2.dat把三角形拆成了边,本质是绘制线条而非填充多边形,自然只有边缘着色。
两种可行的解决方案
方法1:用polygons直接填充三角形(推荐,更直观)
gnuplot的polygons样式可直接识别空行分隔的多边形顶点块,结合颜色映射(palette)就能实现按温度值填充颜色。
步骤1:配置基础参数
# 设置颜色映射(可自定义,示例中10对应蓝色、20对应红色) set palette defined (10 "blue", 20 "red") # 关闭图例,设置坐标轴标签 set key off set xlabel "X" set ylabel "Y"
步骤2:绘制填充三角形
直接使用你的原始数据file1.dat(每个三角形3个顶点,空行分隔):
plot 'file1.dat' using 1:2:3 with polygons fillcolor palette notitle
该命令会把每个空行分隔的3个顶点识别为一个三角形,用第三列的温度值匹配palette中的颜色填充。
方法2:配置pm3d支持三角形网格
如果一定要用pm3d,需开启三角形模式,并指定顶点颜色的计算方式:
set pm3d map triangles corners2color mean # corners2color可选mean/min/max,示例中三角形顶点温度一致,选哪个结果都相同 set palette defined (10 "blue", 20 "red") set key off splot 'file1.dat' using 1:2:3 with pm3d notitle
triangles参数告诉pm3d将每个空行分隔的顶点块当作三角形处理;corners2color mean表示用三角形三个顶点的温度平均值确定填充色。
验证效果
用上述任意一种方法运行后,会看到:
- 第一个三角形(顶点温度10)填充为蓝色;
- 第二个三角形(顶点温度20)填充为红色,完全符合热力图需求。
内容的提问来源于stack exchange,提问作者Christophe Martin
相关产品推荐
相关产品推荐

