【问题标题】:Avoid interpolation of discontinuities for periodic data避免对周期性数据的不连续性进行插值
【发布时间】:2016-03-18 21:41:07
【问题描述】:

我有一个复数值数据文件,我想在平面 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

结果如下所示:

如您所见,在相位值从 -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

【问题讨论】:

  • 链接您的数据文件可能会有所帮助,以便潜在的帮助者可以进行一些测试。
  • 好点。我添加了一个基于复杂函数的最小示例。如果它是数据文件或函数,对我的问题的解决方案没有任何影响。
  • 实际上,您的数据结构可以产生影响。如果您的数据在网格中的常规点给出,您可以使用with image 而不是pm3d,这有几个优点。
  • 因为with image 不进行插值。因此,您会在每个网格站点上得到一个点,其颜色对应于 z 分量。如果你的网格很稀疏,这看起来不太好。但如果你的网格足够密集,我想这或多或少会像你想要的那样。
  • 如果您将编辑的splot ... 替换为plot "++" u ($1):($2):(arg(exp(I*$1*$2))) w image,您会发现问题消失了。但同样,此解决方案是否适合您取决于您​​的数据文件的结构和采样密度。有一些方法可以使用 set dgrid3d 进行插值,但这可能无法解决您的问题。

标签: gnuplot


【解决方案1】:

我坚持在我的 cmets 中,通常最好尽可能使用 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

}

【讨论】:

  • 很好,现在为什么 gnuplot 的 help 不解释 corners2color 选项?非常感谢您的麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多