【发布时间】:2016-03-18 21:41:07
【问题描述】:
我有一个复数值数据文件,我想在平面 pm3d 图中将相位信息与绝对值分开绘制。我像这样在-pi 和pi 之间定义了一个循环调色板
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