使用pm3d与dgrid3d绘图时的网格及颜色异常问题求助
问题分析与解决
1. dgrid3d 参数理解偏差
set dgrid3d 3,6 里的两个数值是生成的网格点数量,不是你以为的区间/面数。gnuplot 会用这些点数生成 (点数-1)×(点数-1) 的面网格,所以设置3,6得到2行5列是正常逻辑。如果要得到3行6列的面网格,需要改成 set dgrid3d 4,7(面数=点数-1)。
2. 移除dgrid3d后绘图空白的原因
pm3d 要求数据是结构化网格格式,你的 test.dat 虽然数据是完整的(6个x值×3个y值),但缺少了分组空行——gnuplot 无法自动识别不同x值的分组,所以没法渲染pm3d曲面。
修复方案二选一:
方案一:修改数据格式
在每个x值对应的3行数据后加空行(最后一组可以不加),比如:
0 1 1 0 2 0 0 3 0 1 1 1 1 2 0.25 1 3 0 2 1 1 2 2 0.5 2 3 0 3 1 0 3 2 0.5 3 3 0 4 1 0 4 2 0.25 4 3 1 5 1 0 5 2 0 5 3 1
之后移除 set dgrid3d 语句,直接用pm3d绘图即可。
方案二:调整gnuplot参数
不用改数据,换成 set pm3d map(专门适配pm3d的热图模式)替代 set view map,代码如下:
set autoscale set ytics 1 set xtics 1 set ztics 0.1 set pm3d map # 替换set view map,自动适配散点转结构化网格 set contour base set palette rgbformulae 22,13,10 set colorbox set pm3d interpolate 1,1 splot 'test.dat' using 1:2:3 with pm3d notitle
3. 颜色显示异常的修正
如果颜色还是不符合预期,试试这几点:
- 手动指定z值范围:添加
set zrange [0:1],避免自动缩放识别偏差 - 调整插值参数:比如把
set pm3d interpolate 1,1改成interpolate 2,2,让颜色过渡更自然 - 更换调色板公式:22,13,10是蓝红渐变,要是需要其他风格,可以换成3,11,6(彩虹色)这类公式
完整可用代码示例
无插值版(用原始数据)
先给test.dat加分组空行,再用这段代码:
set autoscale set ytics 1 set xtics 1 set ztics 0.1 set view map set contour base set palette rgbformulae 22,13,10 set colorbox splot 'test.dat' using 1:2:3 with pm3d notitle
带插值版(生成3行6列面网格)
set autoscale set ytics 1 set xtics 1 set ztics 0.1 set view map set contour base set palette rgbformulae 22,13,10 set colorbox set dgrid3d 4,7 # 对应3行6列的面网格 set pm3d interpolate 1,1 splot 'test.dat' using 1:2:3 with pm3d notitle
内容的提问来源于stack exchange,提问作者Juan Luis Rubio
相关产品推荐
相关产品推荐

