R 图形引擎中剪切的改进



更新(2020-11-18):canClip = NA_LOGICAL 已替换为 deviceClip = TRUE

无论图形设备是否能够执行剪切,R 图形引擎都会执行一些输出剪切。例如,发送到可以执行其自身剪切的 postscript() 设备的输出仍由图形引擎剪切到设备边缘。

这对于无法剪切的设备(例如 xfig() 设备)很有用,并且在历史上用作防止向设备发送非常大的值的一种保护。后一种情况过去与 PostScript 是一种非常重要的格式且 PostScript 文件的 ghostview 查看器无法处理非常大的值有关。

不幸的是,图形引擎执行的剪切可能会引入伪像。例如,如果我们绘制一条非常粗的线,其线端样式为方形,并且延伸到图形设备边缘之外,则图形引擎会将该线剪切到设备边缘,并且剪切线的粗方形端在输出中可见(如以下线条的左端)。

此外,对于重要的现代图形设备、格式和查看器,可能不再需要针对大值的防御。

图形引擎中剪切的实现已通过多种方式进行了修改以改善这种情况,其中最重要的是

  • 图形设备现在可以指定 deviceClip = TRUE 以指示图形引擎不应为该设备执行任何剪切。

  • 当图形引擎为可以执行其自身剪切的设备剪切输出(canClip = TRUE)时,输出将剪切到比设备大得多的区域,而不是剪切到设备边缘。这消除了上面剪切线的粗方形端之类的伪像;下面显示了新的更正结果。

还进行了一些其他较小的改进;请参阅此处以获取更多详细信息。

这些更改的主要影响应该是由于移除了图形引擎剪切伪像而改进的输出。

提供图形设备的 R 包的维护者可能希望尝试新的deviceClip设置,以防万一它能提供性能改进(通过移除图形引擎剪切计算)。

执行视觉差异测试的 R 包的维护者(例如,使用“vdiffr”或“gdiff”包)可能需要更新其“模型”输出文件以调整剪切伪像的移除。