使用pm3d与dgrid3d绘制Gnuplot热图出现空白区域,如何解决?
解决gnuplot随机点热图边缘空白问题
你遇到的问题根源在于:当使用dgrid3d处理随机点数据时,gnuplot默认会给轴范围自动添加一些余量,导致热图和绘图区域边缘出现空白;而直接绘制函数时,isosample是在设定的轴范围内均匀生成点,自然会填满整个区域。下面是具体的解决方法,完全不需要手动猜测数据范围:
步骤1:自动获取数据的x、y极值
用stats命令可以快速统计数据文件中x和y列的最小、最大值,而且不会输出冗余信息:
stats "data.txt" using 1:2 nooutput
执行后,gnuplot会自动生成几个变量:STATS_min_x、STATS_max_x、STATS_min_y、STATS_max_y,分别对应x列的最小值、最大值,y列的最小值、最大值。
步骤2:设置轴范围严格贴合数据极值
通过noextend选项关闭gnuplot默认的轴范围扩展,让轴的上下限完全等于数据的极值:
set xrange [STATS_min_x:STATS_max_x] noextend set yrange [STATS_min_y:STATS_max_y] noextend
步骤3:保留你的原有绘图配置并绘图
把你之前的热图设置和绘图命令加进来,完整的命令序列如下:
# 统计数据极值 stats "data.txt" using 1:2 nooutput # 锁定轴范围 set xrange [STATS_min_x:STATS_max_x] noextend set yrange [STATS_min_y:STATS_max_y] noextend # 热图基础设置 set view map set dgrid3d 50,50,2 set pm3d at b unset key unset surface # 绘制热图 splot "data.txt" using 1:2:3
这样处理后,dgrid3d生成的插值网格就会完全填满整个绘图区域,和你直接绘制函数时的效果一致。如果之后觉得边缘过于紧凑,也可以手动给范围加一点缓冲,比如set xrange [STATS_min_x-0.05:STATS_max_x+0.05] noextend,根据你的数据精度调整即可。
内容的提问来源于stack exchange,提问作者Dirk K.
相关产品推荐
相关产品推荐

