我正在尝试使用grImport包(http://cran.r-project.org/web/packages/grImport/index.html)将外部矢量图像导入R图,例如我拍这张照片:
然后我使用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)
答案 0 :(得分:0)
这是一个相当老的问题。鉴于仍然没有答案,我想我将分享一些用于将外部图形合并到R绘图中的现代工具。
使用ImageMagick或等效的工具,将源.jpg
转换为.pdf
。在Linux上,这是使用convert crashed.jpg crashed.pdf
完成的。我们还将在整个答案中使用以下基本图解:
library( ggplot2 )
g0 <- ggplot( mtcars, aes(disp, mpg) ) + geom_point() + theme_bw()
我们首先使用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 )
与上述不同,此解决方案直接与.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)
这种方法也可以直接与.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")) )