R ggiraph - без графика при запуске.R файла
Как получить график при выполнении файла.R? Файл (test.r
) выглядит так:
library(ggplot2)
library(ggiraph)
gg <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(cyl)))
gg1 <- gg + geom_point_interactive(aes(tooltip = gear), size = 5)
ggiraph(code = print(gg1))
Я запускаю его с этой командой:
R < test.R --no-save
Но ничего не происходит. Если я просто запускаю R из командной строки и ввожу код построчно, Firefox открывается и показывает действительно хороший график с желаемой надписью мыши.
R version 3.2.3 (2015-12-10)
x86_64-pc-linux-gnu
1 ответ
R
создает временный файл.html, а затем порождает gvfs-open
процесс для просмотра этого файла (который в свою очередь открывает Firefox). Когда вы запускаете свой скрипт из командной строки, R
закрывает и очищает свои временные файлы до того, как процесс Firefox сможет полностью загрузиться. Вы можете убедиться в этом, выполнив
$ R -q --interactive < test.R
> library(ggplot2)
> library(ggiraph)
> gg <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(cyl)))
> gg1 <- gg + geom_point_interactive(aes(tooltip = gear), size = 5)
> ggiraph(code = print(gg1))
Save workspace image? [y/n/c]:
gvfs-open: /tmp/RtmpPxtiZi/viewhtml3814550ff070/index.html: error opening location:
Error when getting information for file '/tmp/RtmpPxtiZi/viewhtml3814550ff070/index.html': No such file or directory
Простое исправление - добавить Sys.sleep(5)
в конце вашего сценария. Это паузы R
на несколько секунд, позволяя gvfs-open
процесс, чтобы закончить открытие вашего временного файла в окне браузера, прежде чем R
выходит и убирает за собой.
Обратите внимание, что R
все равно удалит временный index.html
файл, когда он выходит после Sys.sleep()
, но Firefox уже будет иметь кеш в памяти.
РЕДАКТИРОВАТЬ: альтернативное решение состоит в том, чтобы явно записать ваш интерактивный сюжет в файл.html, который сохраняется после R
выходы. Вы можете сделать это, сохранив результат ggiraph
к переменной, а затем передать это htmlwidgets::saveWidget
:
myplot <- ggiraph(code = print(gg1))
htmlwidgets::saveWidget( myplot, "test.html" )
browseURL( "test.html" )