避免插入周期性数据的不连续性

时间:2016-03-17 14:04:44

标签: gnuplot

我有一个复值数据文件,我想在平面pm3d图中将相位信息与绝对值分开绘制。我在-pipi之间定义了一个循环调色板,就像这样

set palette model HSV
set palette define (-pi 0 1 1, pi 1 1 1)
set palette maxcolors 1000

即。我将HSV色轮边缘的两个“红色”分配给相位的终点(±pi)。然后我开始绘制这样的数据:

set pm3d map
set cbrange [-pi:pi]
splot 'datafile' w pm3d

结果如下: Phase plot with apparent discontinuity at +/- pi

正如您所看到的,当绘图算法插值两个相反的值时,相位值从-pi跳到pi的位置会出现伪影,产生接近0的颜色(青色)。有没有办法从gnuplot 中避免这个工件?当然,我总是能够以避免不连续性的方式操纵数据,并将阶段分配到标准[-pi:pi]域之外,但我宁愿不这样做。

修改 您可以使用函数而不是数据文件重现类似于上面的图:

I = {0,1}
set xrange [0:3]
set yrange [0:3]
set isosample 100
splot arg(exp(I*x*y)) w pm3d

1 个答案:

答案 0 :(得分:1)

我在评论中坚持认为,通常情况下,使用with image进行彩色地图绘制会更好,尤其是因为对于矢量图像终端,pm3d的(非)压缩可以导致非常大的图像尺寸。但是,您有一个非常具体的情况,因为您想要插值。我已经探索了set pm3d corners2color的不同选项,它决定了相邻网格站点之间的插值是如何完成的。一些选项可能会让你摆脱问题,自己判断:

set palette model HSV
set palette define (-pi 0 1 1, pi 1 1 1)
set palette maxcolors 1000
set pm3d map
set cbrange [-pi:pi]
I = {0,1}
set xrange [0:3]
set yrange [0:3]
set isosample 100

unset tics
unset colorbox

set term pngcairo size 640,4096; set output "out.png"
set multiplot layout 9,1

do for [mode in "mean geomean median min max c1 c2 c3 c4"] {

eval "set pm3d corners2color ".mode

set title mode            
splot arg(exp(I*x*y)) w pm3d not

}

enter image description here