Gnuplot:当超出范围时使pm3d调色板重复

时间:2017-10-17 08:13:43

标签: dictionary gnuplot repeat phase cyclic

计划是以连续的方式使用pm3d贴图和重复的调色板绘制2D复合函数的相位。更具体地说,调色板仅在[-pi,pi]上定义,而相位本身可能超出此范围。颜色调色板应重复这些值。

我目前的尝试是强制功能保持在范围内,并在通过减去或增加2 * pi的倍数越过边界时从另一侧重新开始。 然而,只要在函数中发生这种相位跳变,就会产生伪影。请注意图中的蓝色像素环:

Phaseplot

这是用于生成此图的代码:

    set pm3d map
    set palette model HSV defined ( 0 0 1 1, 1 1 1 1 )
    set samples 100; set isosamples 100

    set xrange [-4:4]
    set yrange [-4:4]
    set cbrange [-pi:pi]

    set cblabel "Phase"

    phaseCont(u,v) = 2*pi* ((u/4)**2 + (v/4)**2)
    phaseClip(u,v) = phaseCont(u,v) - (floor(phaseCont(u,v)/(2*pi) + 0.5) * 2*pi)

    set terminal png
    set output "phaseplot.png"

    splot phaseClip(x,y) with pm3d

    unset output

当插值发生时,神器出现是有道理的,但当然不是我想要的。

有没有办法用重复的颜色图案创建漂亮的2D图?

1 个答案:

答案 0 :(得分:1)

Gnuplot无法定义无限重复的调色板。在您的情况下,干扰插值来自默认的pm3d插值,它计算所有四个角的平均值以确定颜色(参见show pm3d)。 为了避免这种插值,例如

set pm3d corners2color c1

仅从一个角确定颜色。特别是在您不喜欢的情况下,因为您可以随时增加函数的采样以获得更平滑的结果:

set pm3d map
set palette model HSV defined ( 0 0 1 1, 1 1 1 1 )
set samples 500; set isosamples 500

set xrange [-4:4]
set yrange [-4:4]
set cbrange [-pi:pi]
set pm3d corners2color c1

set cblabel "Phase"

phaseCont(u,v) = 2*pi* ((u/4)**2 + (v/4)**2)
phaseClip(u,v) = phaseCont(u,v) - (floor(phaseCont(u,v)/(2*pi) + 0.5) * 2*pi)

set terminal pngcairo
set output "phaseplot.png"

splot phaseClip(x,y) with pm3d

enter image description here