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")) )

Другие вопросы по тегам