В настоящее время я всегда экспортирую свои R-графики в Powerpoint в векторном формате, используя отличный пакет ReporteRs
, как в
library(ReporteRs)
myplot = function() print(qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7)))
doc = pptx()
doc = addSlide(doc, slide.layout = "Blank")
doc = addPlot( doc, myplot, vector.graphic = TRUE, fontname="Arial",
offx = 0.1*dim(doc)$slide.dim["width"], offy = 0.05*dim(doc)$slide.dim["height"],
width = 0.8*dim(doc)$slide.dim["width"], height = 0.9*dim(doc)$slide.dim["height"])
writeDoc( doc, "plot.pptx")
То, что я нахожу неудобным в этом рабочем процессе, состоит в том, что теперь мне нужно обернуть мои команды построения в функцию (с print()
для lattice
или ggplot2
графиков или просто return(plot())
для базовых графиков R) и что мне не нравится, когда нужно вручную указывать смещения и размер (обычно я предпочитаю просто получать заполнение по центру, центрированный график на моем слайде). Мне просто интересно, если вместо этого вы не сможете сделать свой график первым (базовый график R, график lattice
или график ggplot2
), а затем определить функцию export2PPT
, которая фиксирует вывод вашего текущего графического устройства как функцию и передает ее на ReporteRs
и addPlot
, чтобы экспортировать ваш график как Powerpoint (с центрированием и соответствующим масштабированием), по аналогии с функцией dev.copy2pdf
, которая работает так же, как экспортировать в PDF?
И как только мы получим такую функцию, возможно даже изменим исходный код grDevices
функций windows() и savePlot(), чтобы получить дополнительную команду File... Сохранить как Powerpoint, если вы использовали устройство windows()
? Или это что-то для людей R Core?
Специально для использования в классе это было бы очень удобно, я думаю, учитывая доминирование MS Office/LibreOffice. (поскольку Powerpoint намного проще редактировать, чем PDF, что позволяет легко вносить небольшие изменения в окончательный макет R-графиков, а векторный вывод по меньшей мере так же хорош, как PDF, плюс прозрачность также полностью поддерживается - для PDF я считаю, что импорт в Inkscape часто бывает некорректно, если не использовать Adobe Illustrator)
Любой, кто знал бы, как это сделать?
EDIT: для первой части моей проблемы я просто нашел решение, см. мой ответ ниже
EDIT2: теперь я сделал [small package export
] со вспомогательными функциями graph2ppt
и graph2doc
для экспорта текущего активный график для Powerpoint или Word, а также table2doc
, table2ppt
и table2html
для экспорта ранее указанного объекта R-статистики в таблицу Word, Powerpoint или HTML, например
install.packages("rJava")
install.packages("ReporteRs")
install.packages("ReporteRsjars")
install.packages("ggplot2")
install.packages("rtable")
install.packages("xtable")
install.packages("taRifx")
install.packages("devtools")
library(devtools)
devtools::install_github('tomwenseleers/export',local=F)
library(export)
?graph2ppt
?table2doc
## export of ggplot2 plot
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species,
size = Petal.Width, alpha = I(0.7))
graph2ppt(file="ggplot2 plot.pptx", aspectr=1.7)
# add 2nd slide with same graph in different aspect ratio
graph2ppt(file="ggplot2 plot.pptx", aspectr=1.3, append=T)
# add 3d slide with same graph with fixed width & height
graph2ppt(file="ggplot2 plot.pptx", width=6, height=5, append=T)
# export of aov Anova output
fit=aov(yield ~ block + N * P + K, npk)
summary(fit)
table2doc(file="table_aov.docx")
summary(fit)
table2doc(file="table_aov.docx",append=T,digits=4)
summary(fit)
table2doc(file="table_aov.docx",append=T,digits=4,digitspvals=1)
summary(fit)
table2html(file="table_aov.html")
Если кто-нибудь найдет какие-нибудь ошибки, сообщите мне!