【问题标题】:disturbing artifacts in pdfpdf中令人不安的伪影
【发布时间】:2012-05-03 12:06:20
【问题描述】:

在使用填充曲线绘制图时,我遇到了一个问题。在填充区域之间,似乎存在“间隙”。但是,这些伪影不会出现在打印件上,而是取决于查看器和缩放选项。在 Gnuplot 中,我使用 eps 终端,eps 文件看起来很棒,但是当我转换为 pdf 时会出现线条。它要么在绘图后直接完成,要么在将乳胶文档从 dvi 转换为 pdf 时完成。由于现在大多数文件都在这里展示,这是一个问题。当我在 Gnuplot 中直接使用 pdfcairo 终端时也会出现该问题,因此它不是由单独的转换(尝试 epstopdf 和 ps2pdf)引起的。

我附上了“acroread”中显示的绘图的屏幕截图(其他 pdf 查看器中的问题相同)。

有没有人知道如何摆脱它但保持图形矢量化?

【问题讨论】:

    标签: pdf gnuplot eps


    【解决方案1】:

    我刚刚遇到了同样的问题。显然两条曲线之间的填充 是作为一组不完全相互接触的多边形完成的,因此 在某些 PDF 查看器上可见的细白线。

    解决此问题的一种方法是在这些多边形边界上绘制。第一的 在 gnuplot 中定义 min 和 max 函数:

    min(x, y) = x < y ? x : y
    max(x, y) = x > y ? x : y
    

    然后,假设“数据文件”的第 1 列包含您的 x 值和 第 2 列和第 3 列包含曲线 2 和 3 的 y 值,写:

    plot "datafile" using 1:2:3 with filledcurves lc rgb "gray", \
    "" using 1:2:(min($2, $3)):(max($2, $3)) with yerrorbars ps 0 lt 1 \
    lc rgb "gray" lw 0.5
    

    第一个绘图指令以灰色填充曲线之间的空间。 第二个绘图指令在每个位置绘制零大小 (ps 0) 的点 曲线 (2) 上的 x 值 (1),细 (lw 0.5)、连续 (lt 1)、灰色 (lc rgb "gray"), 垂直误差条 (yerrorbars) 从下到 曲线 2 和 3 中的较高者。

    这覆盖了白线。为了获得最佳结果,您可能需要 试验钢筋的厚度(例如,lw 0.6、lw 0.2)。

    【讨论】:

      【解决方案2】:

      此问题已在 gnuplot 5.2 中得到修复,请参阅 https://sourceforge.net/p/gnuplot/patches/749/

      实际的问题是,填充曲线以前被绘制为许多四边形,这会导致许多查看器由于抗锯齿而出现伪影(白色条纹)。

      自 5.2 版以来,填充曲线被渲染为单个多边形,从而防止了这些问题(参见上面链接的问题)。

      【讨论】:

        【解决方案3】:

        问题仍然存在于 Gnuplot 5.0.4 中,至少是我用来输出 PDF 的 cairolatex 终端。 我还想为两条曲线之间的区域着色,在我的例子中定义为函数。

        当我使用类似的东西时

        f(x) = 2 + sin(x)
        g(x) = cos(x)
        plot '+' using 1:(f($1)):(g($1)) with filledcurves closed
        

        我得到了与问题中相同的垂直白线。

        对于一条总是在另一条之上的曲线,一个简单的解决方案是让 Gnuplot 用所需颜色填充从上部曲线到 x 轴的区域,然后从下部曲线向下用白色绘制它:

        f(x) = 2 + sin(x)
        g(x) = cos(x)
        plot f(x) with filledcurves x1, g(x) w filledc x1 fs lc rgb "white"
        

        显然,这种填充曲线样式(不是在曲线之间,而是在曲线和轴之间)避免了梯形伪影。 这可以很容易地扩展为绘制数据文件和多个堆叠治疗,就像问题中一样。只需从上到下绘制,并在最低曲线和 x 轴之间的空白区域涂上白色。

        对于重叠曲线,像 françois-tonneau 的答案那样构建最小和最大曲线可能会奏效。

        【讨论】:

          【解决方案4】:

          如果您谈论的是红色和青色位,则差距可能是由 RGB 屏幕上的红色 + 青色 = 白色引起的错觉。也许没有间隙,但由于像素的接近,边框区域显示为白色。

          截取屏幕截图并将其放大,以便您可以看到感知间隙周围的各个像素。

          如果是这种情况,可能为相邻颜色选择不同的配色方案会消除效果。除了红色和青色位之外,我当然看不到任何与您的描述相符的东西。

          【讨论】:

          • 我的意思是垂直线,在灰色区域最容易看到。不管它们有什么颜色,我只想要一个像 eps 图形中的灰色区域
          • 我手头没有 gnuplot 的工作实例,所以我真的不能做更多的故障排除。答案只是猜测。尝试绘制到 postscript 并查看它实际呈现图形的方式。
          • 您也可以通过其他 PDF 阅读器查看它。有不少基于ghostscript引擎的OSS。查看问题是否跨渲染引擎出现。
          • 经过一番搜索,我发现了以下帖子:groups.google.com/group/comp.graphics.apps.gnuplot/… 显然这是与抗锯齿有关的众所周知的问题。目前似乎没有变通办法。可以使用“convert +antialias”将 eps 转换为 png,但这会在转换回 eps 时破坏文件大小.....
          • @RaphaelRoth - 这些图表大部分是扁平的色块。它们应该通过行程编码很好地压缩,但不会像矢量表示那样紧凑。
          【解决方案5】:

          来自https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/ivRaKpu5cJ8,这似乎是一个纯粹的 Gostscript 问题。

          使用 Gnuplot 的 eps 终端并将 eps 文件转换为 pdf

          epstopdf -nogs <file.eps> -o <file.pdf>
          

          解决了我系统上的问题。在相应的手册页中,“-nogs”选项指示 epstopdf 不要使用 Gostscript。

          【讨论】:

          • 我试过了,然后输出文件不是PDF,我无法用pdf查看器打开它
          猜你喜欢
          • 2021-06-11
          • 1970-01-01
          • 2010-10-08
          • 2014-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多