2017-10-17 134 views
2

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

我目前的尝试是强制功能留在范围内,并通过减去或添加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图?

+0

的文物出现,因为在默认情况下pm3d的所有四个角之间进行插值四边形。你可以用例如'设置pm3d corners2color c1'。否则我不知道该怎么做。 – Christoph

+0

是的,这就是我认为它来自。并感谢你与角落2color真棒提示,这有理想的效果! 能否请您发表评论作为答案,以便我可以将其标记为正确答案? – JCh3ss

回答

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