R: Импорт векторной графики на график - не удается заставить grImport работать
Я пытаюсь использовать пакет grImport ( http://cran.r-project.org/web/packages/grImport/index.html) для импорта внешнего векторного изображения в R-график, например, я делаю эту картинку:
и затем я конвертирую в ps, используя конвертирование ImageMagick:
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 ответов
Это довольно старый вопрос. Учитывая, что это все еще без ответа, я подумал, что поделюсь некоторыми современными инструментами для включения внешней графики в графики 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 )
Наложение изображения поверх существующего графика с помощью 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)
Использование изображения как элемента сюжета с помощью яйца
Этот подход также работает напрямую с.jpg. Мы загружаем изображение и заполняем новый столбец вmtcars
с получившимся объектом. Затем столбец может быть предоставленgeom_custom()
стандартным способом ggplot:
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")) )