如何改进 Gnuplot 中渐变和填充元素的渲染?

How to improve the rendering of gradients and filled elements in Gnuplot?

我注意到 Gnuplot 在处理填充元素时会产生难看的伪像。

一个实例在下图的调色板中:

另一个例子是在从 ASCII 文件中的点定义的两条曲线之间使用 filledcurves。在这种情况下,您可以看到线条之间不是真正的实心填充,而是该区域填充了许多条带,只有在缩放相当多后才会变得明显,但是当将图像光栅化为 png 或类似:

这似乎与终端无关。我试过 postscrippdfcairo 甚至 tikz。有什么可以改进的吗,或者这是 Gnuplot 的硬性限制?

不幸的是,当您有两个填充的多边形相互接触时,这是由于文档查看器中的抗锯齿造成的。这种情况发生在 filledcurves 绘图样式中,它由许多四边形的填充区域组成,以及 pm3d 样式(正如您在颜色框中看到的那样,它显示了相同的工件)。也可以看看 problematic Moire pattern in image produced with gnuplot pm3d and pdf output. 一个具体的演示案例。

有一个解决方法,但是非常麻烦。你必须用一些脚本生成一个填充的多边形对象,填充它,使用 stats 来确定范围,绘制一个空图(参见 )。

我假设您有一个包含三列的数据文件,您将使用

绘制它们
plot 'test.dat' using 1:2:3 with filledcurves

使用以下非常粗糙的python脚本

from __future__ import print_function
from numpy import loadtxt
import sys

M = loadtxt(sys.argv[1])
print('set object 1 polygon ', end='')
for i in range(0,len(M)):
    if (i == 0):
        print('from {0},{1} '.format(M[i][0], M[i][1]), end='')
    else:
        print('to {0},{1} '.format(M[i][0], M[i][1]), end='')
for i in range(len(M)-1,-1,-1):
    print('to {0},{1} '.format(M[i][0], M[i][2]), end='')

您可以使用

绘制填充曲线
# determine the autoscaling ranges
set terminal push
set terminal unknown
plot 'test.dat' using 1:2, '' using 1:3
set terminal pop

set xrange [GPVAL_X_MIN:GPVAL_X_MAX]
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
eval(system('python script.py test.dat'))
set object 1 polygon fillstyle solid noborder fillcolor rgb 'red'
plot NaN notitle

这还没有解决锯齿状颜色框的问题:(