R:将矢量图形导入绘图 - 无法使grImport工作

时间:2015-04-28 12:43:40

标签: r

我正在尝试使用grImport包(http://cran.r-project.org/web/packages/grImport/index.html)将外部矢量图像导入R图,例如我拍这张照片:

drawing

然后我使用ImageMagick的转换转换为ps:

convert crashed.jpg crashed.ps

我开始R并发出以下命令:

R> library("grImport")
R> PostScriptTrace("crashed.ps", "crashed.xml")
R> myPic = readPicture("crashed.xml")
R> grid.picture(myPic)

然后根据http://cran.r-project.org/web/packages/grImport/vignettes/import.pdf显示图像。但我得到的只是一个空洞的情节突然出现!

R> sessionInfo()
R version 3.1.3 (2015-03-09)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)

1 个答案:

答案 0 :(得分:0)

这是一个相当老的问题。鉴于仍然没有答案,我想我将分享一些用于将外部图形合并到R绘图中的现代工具。

初步

使用ImageMagick或等效的工具,将源.jpg转换为.pdf。在Linux上,这是使用convert crashed.jpg crashed.pdf完成的。我们还将在整个答案中使用以下基本图解:

library( ggplot2 )
g0 <- ggplot( mtcars, aes(disp, mpg) ) + geom_point() + theme_bw()

使用grImport2将图像作为绘图面板导入

我们首先使用grConvert将.pdf转换为.svg,然后将其导入并转换为grob对象。

grConvert::convertPicture( "crashed.pdf", "crashed.svg" )
p <- grImport2::readPicture( "crashed.svg" )
g <- grImport2::pictureGrob( p )
gridExtra::grid.arrange( g0, g, nrow=1 )

enter image description here

使用cowplot

将图像覆盖在现有图的顶部

与上述不同,此解决方案直接与.jpg一起使用:

## Ensure magick is installed for draw_image()
if(!require("magick")) install.packages( "magick" )
cowplot::ggdraw(g0) + cowplot::draw_image("crashed.jpg", x=0.25, y=0.25, scale=0.25)

enter image description here

借助egg

将图像用作绘图元素

这种方法也可以直接与.jpg一起使用。我们加载图像并在mtcars中用结果对象填充新列。然后可以按照标准ggplot方式将列提供给geom_custom()

mtcars$img <- list(jpeg::readJPEG( "crashed.jpg" ))
g0 + egg::geom_custom( data=mtcars, aes(data=img), grob_fun=grid::rasterGrob,
                      fun_params = list(height=unit(1,"lines")) )

enter image description here