R:将矢量图形导入绘图 - 无法使grImport生成有意义的XML

时间:2016-10-13 13:44:33

标签: r xml plot ghostscript grimport

我正在尝试使用grImport包导入矢量图形,但遇到了一个我无法解决的问题(尽管花了一整天时间在网上搜索,包括在这里!)...

我已经安装了Ghostscript,并将我的.png图像转换为.ps文件(并通过转换.jpg和.pdf图像来检查这是否是失败的原因 - 但结果相同)。

以下是我的.png文件示例: simple cross png

我转换后的.ps文件示例: simple cross ps

我运行时没有收到任何错误消息:

PostScriptTrace("cross.ps")
img <- readPicture("cross.ps.xml")

然后,如果我尝试在图中使用图片,则不会绘制图像。

追溯后,我发现PlotScriptTrace生成的.XML文件不包含任何路径:

str(img)
>Formal class 'Picture' [package "grImport"] with 2 slots
..@ paths  : Named list()
..@ summary:Formal class 'PictureSummary' [package "grImport"] with 3 slots
.. .. ..@ numPaths: num 0
.. .. ..@ xscale  : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "xmin" "xmax"
.. .. ..@ yscale  : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "ymin" "ymax"

因此,我认为当我调用PostScriptTrace()或readPicture()时会出现问题,但我不知道如何确定从哪里开始或如何从这里开始。

这是我的sessionInfo(),如果这有帮助:

R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] grImport_0.9-0 XML_3.98-1.4  

请注意,我的问题与以下内容相同: R: Importing vector graphics to a plot - Cannot get grImport to work, 但是上一个问题的答案对我没有帮助 - 它指出XML文件没有正确编译,我已经想到了。

任何人都可以指出我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

移动到答案,对于评论来说太大了。

  

我正在尝试导入.ps文件,我认为这是一个矢量图形?

确定这是一种误解,PostScript程序可以包含矢量和位图数据。很明显,如果你从位图数据(PNG,JPEG,TIFF等)开始,那么PostScript等效程序将只包含相同的(模压缩)位图数据。

查看您发布的PostScript程序,我们可以看到Ghostscript的ps2write设备常用的综合PostScript标头,后跟实际程序:

%%EndPageSetup
5 0 obj
<</Length 156041>>stream
q 0.12 0 0 0.12 0 0 cm
q 3950 0 0 5341.67 508.333 833.333 cm
BI
/CS/RGB
/W 1422
/H 1923
/BPC 8
/F[/A85
/LZW]
ID
J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R=AlC^c
...
...
=Z;P44-S>^PSliQ=\"^E99e+*Po3Mc=]UKU!W~>
EI Q
Q

endstream
endobj
pagesave restore
%%PageTrailer
%%Trailer
end
%%EOF

ID函数(在prolog中定义)将以下内联数据绘制为位图图像。然后是位图数据,程序将发出页面,清理并退出。

因此根本没有矢量数据,因为源数据不是矢量,因此不足为奇。

我对R一无所知,但从我看到的问题我认为它无法处理位图数据,这就是为什么你得到空白输出。