R:将矢量图形导入绘图 - 无法让 grImport 产生有意义的结果 XML
R: Importing vector graphics to a plot - Cannot get grImport to produce meaningful XML
我正在尝试使用 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() 以防万一ps:
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 文件没有被正确编译,我已经弄明白了。
谁能指出我哪里出错了??
移至答案,太大而无法评论。
I'm trying to import the .ps file, which I think is a vector graphic?
好的,这是一种误解,PostScript 程序可以同时包含矢量和位图数据。所以很明显,如果您从位图数据(PNG、JPEG、TIFF 等)开始,那么 PostScript 等效程序将只包含相同的(模压缩)位图数据。
查看您发布的 PostScript 程序,我们可以从 Ghostscript 的 ps2write 设备中看到通常的综合 PostScript header,然后是实际程序:
%%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+\<,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 函数(在序言中定义)将以下内联数据绘制为位图图像。然后是位图数据,程序发出页面,清理并退出。
所以那里根本没有矢量数据,这并不奇怪,因为源数据不是矢量。
我对 R 一无所知,但从我看到的问题来看,我认为它不能处理位图数据,这就是为什么你得到空白输出的原因。
我正在尝试使用 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() 以防万一ps:
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 文件没有被正确编译,我已经弄明白了。
谁能指出我哪里出错了??
移至答案,太大而无法评论。
I'm trying to import the .ps file, which I think is a vector graphic?
好的,这是一种误解,PostScript 程序可以同时包含矢量和位图数据。所以很明显,如果您从位图数据(PNG、JPEG、TIFF 等)开始,那么 PostScript 等效程序将只包含相同的(模压缩)位图数据。
查看您发布的 PostScript 程序,我们可以从 Ghostscript 的 ps2write 设备中看到通常的综合 PostScript header,然后是实际程序:
%%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+\<,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 函数(在序言中定义)将以下内联数据绘制为位图图像。然后是位图数据,程序发出页面,清理并退出。
所以那里根本没有矢量数据,这并不奇怪,因为源数据不是矢量。
我对 R 一无所知,但从我看到的问题来看,我认为它不能处理位图数据,这就是为什么你得到空白输出的原因。