Gnuplot绘制倾斜数据等高线与色图:限制坐标范围后消除多余三角色块的技术问询
解决Gnuplot绘制指定范围色图与等高线时的三角块问题
我明白你遇到的问题了——当你限制x/y范围后,Gnuplot绘制的色图在边界外出现了讨厌的三角填充块,而且直接筛选数据会破坏网格结构导致等高线无法生成。下面给你两个实用的解决方案,优先推荐第一个,操作最简单效果也最好:
方法1:用pm3d clip裁剪区域(推荐)
你之前用的w image对网格完整性要求很高,一旦裁剪范围就容易出现三角补块。换成pm3d绘图样式并启用裁剪功能,既能保留原始完整数据来计算准确的等高线,又能自动切掉超出指定范围的色图区域。
修改后的完整代码:
reset session FILE = "data_sensibilite_correlation_Tpfr_CH" # 先基于全量数据计算等高线,保证等高线的准确性 set contour set cntrparam level discrete 0.5, 1, 1.5, 2, 2.5, 3 set table $Contour splot FILE u 1:2:3 unset table # 设置绘图参数,启用pm3d裁剪 set view map # 切换到2D视图,替代原有的set view set xrange [0:10] set yrange [0.55:0.95] set cbrange [0:4] set xlabel "{/Symbol e}_{/Symbol q} [%]" set ylabel "T_b / T_{w hs}" set cblabel "{/Symbol e}_{{/Symbol F} hs} [%]" unset key set style textbox opaque set pm3d clip # 关键:自动裁剪超出x/yrange的色图区域 plot FILE u 1:2:3 w pm3d, \ $Contour u 1:2 index 1::1 w l lc "red", \ '' u 1:2:3 index 1::1 every ::0::0 w labels boxed
为什么这个方法有效?
- 等高线是基于完整原始数据计算的,不会因为范围限制而缺失或变形;
set pm3d clip会严格按照你设置的x/yrange裁剪色图,不会在边界外生成三角填充块;- 不需要修改原始数据,操作成本最低。
方法2:预处理数据保留规则网格(适合必须用w image的场景)
如果你因为性能或其他原因必须使用w image,那需要确保筛选后的数据依然是规则网格结构(即x、y值保持固定间隔的行列排列)。可以用awk在Gnuplot里直接预处理数据:
reset session # 先筛选出指定范围内的网格点,保留原始网格结构 !awk '$1 >= 0 && $1 <= 10 && $2 >= 0.55 && $2 <= 0.95' data_sensibilite_correlation_Tpfr_CH > filtered_data.txt FILE = "filtered_data.txt" # 基于筛选后的网格数据计算等高线 set contour set cntrparam level discrete 0.5, 1, 1.5, 2, 2.5, 3 set table $Contour splot FILE u 1:2:3 unset table set view map set xrange [0:10] set yrange [0.55:0.95] set cbrange [0:4] set xlabel "{/Symbol e}_{/Symbol q} [%]" set ylabel "T_b / T_{w hs}" set cblabel "{/Symbol e}_{{/Symbol F} hs} [%]" unset key set style textbox opaque plot FILE u 1:2:3 w image, \ $Contour u 1:2 index 1::1 w l lc "red", \ '' u 1:2:3 index 1::1 every ::0::0 w labels boxed
注意事项
这个方法的前提是你的原始数据是严格的规则网格——x值按固定间隔重复排列,y值也是固定间隔的列排列。如果原始数据不是规则网格,筛选后会破坏结构,w image就无法正常绘制了。
内容的提问来源于stack exchange,提问作者Martin7
相关产品推荐
相关产品推荐

