R: Function to export currently active R plot to Powerpoint/Word/LibreOffice

浪子不回头ぞ 提交于 2019-11-30 10:14:02

问题


Currently I always export my R graphs to Powerpoint in vector format using the excellent ReporteRs package, as in

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

What I find inconvenient in this workflow is that I now have to wrap my plot commands in a function (with print() for lattice or ggplot2 plots, or just return(plot()) for base R plots), and that I don't like having to manually specify the offsets and size (I usually prefer to just get a nearly page filling, centered graph in my slide). I was just wondering if instead it wouldn't be possible to make your plot first (base R plot, lattice plot or ggplot2 plot) and then define a function export2PPT that captures the output of your current graphics device as a function and passes it on to ReporteRs and addPlot to export your plot as Powerpoint (centered & appropriately scaled), in analogy to function dev.copy2pdf that works in the same way to export to PDF?

And once we have such a function, perhaps even modify the grDevices source code of functions windows() and savePlot() to have an additional command File...Save as Powerpoint if one was using the windows() device? Or is this something for the R Core people to do?

Especially for use in the classroom this would be super handy I think, given the dominance of MS Office/LibreOffice. (as Powerpoint is much easier to edit than PDF, allowing one to easily make small changes in the final layout of R graphs, and vector output is at least as good as PDF, plus transparency is also fully supported - for PDF I find that import in Inkscape is often a bit buggy, unless one uses Adobe Illustrator)

Anybody who would know how to do this?

EDIT: In the meantime I found the solution, and have wrapped export functions to export the currently active R plot to powerpoint in a package on CRAN, see https://cran.r-project.org/web/packages/export/index.html and https://github.com/tomwenseleers/export for demo usage. The package now uses the officer package as a backend, as ReporteRs is deprecated...


回答1:


Just made a new CRAN package export that allows one to export an R plot in the currently active graphics device to either Powerpoint or Word (or LibreOffice Impress/Writer) in editable (DrawingML) vector format as a one-liner, with full support for transparency, etc, see https://cran.r-project.org/web/packages/export/index.html and demo at https://github.com/tomwenseleers/export

For example:

install.packages("export")
library(export)

Example to export lattice plot:

library(effects)
fit=lm(prestige ~ type + income*education, data=Prestige)
plot(Effect(c("income", "education"), fit),multiline=T, ci.style="bands")
graph2ppt(file="effect plot.pptx", width=7, height=5)

which after right clicking in PPT on "ungroup" can be seen to be nicely in vector format:

From Word or PPT these graphs also export perfectly to (vector format) PDF by using File...Save as...PDF, and it is much easier to make minor tweaks to the layout than is possible by editing directly in the PDF.

If the R Core or RStudio people would like to include this functionality please do - would be super handy for use in the classroom I think, given the dominance and widespread use of the Office suite!



来源:https://stackoverflow.com/questions/31212659/r-function-to-export-currently-active-r-plot-to-powerpoint-word-libreoffice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!