【问题标题】:Gnuplot: Making pm3d palette repeat when out of rangeGnuplot:超出范围时使 pm3d 调色板重复
【发布时间】:2018-03-28 20:54:08
【问题描述】:

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

我目前的尝试是通过减去或添加 2*pi 的倍数来强制函数保持在范围内并在越过边界时从另一侧重新开始。 然而,每当函数中发生这种相位跳跃时,这都会导致伪影。注意图中那些蓝色的像素环:

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

    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 图?

【问题讨论】:

  • 出现伪像是因为默认情况下 pm3d 在四边形的所有四个角之间进行插值。你可以用例如压制这个set pm3d corners2color c1。否则我不知道该怎么做。
  • 是的,这就是我认为它的来源。并感谢您使用corners2color 提供的很棒的提示,它达到了预期的效果!您能否将该评论发布为答案,以便我将其标记为正确答案?

标签: dictionary gnuplot repeat phase cyclic


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多