R: fonction pour exporter actuellement active R plot à Powerpoint / Word/LibreOffice
actuellement, j'exporte toujours mes graphiques R à Powerpoint en format vectoriel en utilisant l'excellent ReporteRs
package, comme dans
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")
ce que je trouve gênant dans ce workflow, c'est que je dois maintenant envelopper mes commandes d'intrigue dans une fonction (avec print()
lattice
ou ggplot2
parcelles, ou tout simplement return(plot())
pour les tracés de base R), et que je n'aime pas avoir à spécifier manuellement les offsets et la taille (je préfère généralement juste obtenir un remplissage de presque page, graphique centré dans ma diapositive). Je me demandais juste si à la place il ne serait pas possible de faire votre parcelle d'abord (parcelle de base R,lattice
plot ou ggplot2
plot) et ensuite définir une fonction export2PPT
qui capture la sortie de votre carte graphique en fonction et les transmet à ReporteRs
et addPlot
exporter votre parcelle Powerpoint (centré et à l'échelle appropriée), par analogie avec la fonction dev.copy2pdf
cela fonctionne de la même manière pour exporter en PDF?
Et une fois que nous avons un tel fonction, peut-être même modifier grDevices
code source les fonctions windows() et savePlot() pour avoir un Fichier de commande...Enregistrer comme Powerpoint si l'on utilisait le windows()
appareil? Ou est-ce quelque chose que les gens du noyau R doivent faire?
surtout pour une utilisation en salle de classe ce serait très pratique, je pense, étant donné la dominance de MS Office/LibreOffice. (comme Powerpoint est beaucoup plus facile à éditer que PDF, permettant à l'un de faire les changements dans la mise en page finale des graphiques R, et la sortie vectorielle est au moins aussi bonne que PDF, plus la transparence est également entièrement prise en charge - pour PDF je trouve que l'importation dans Inkscape est souvent un peu buggy, à moins que l'on utilise Adobe Illustrator)
Quelqu'un qui saurait faire ça?
EDIT: pour la première partie de mon problème, je viens de trouver une solution, voir ma réponse ci-dessous
EDIT2: j'ai maintenant fait un [petit paquet export
] avec fonctions d'aide graph2ppt
et graph2doc
pour exporter le graphique actif vers Powerpoint ou Word ainsi que table2doc
,table2ppt
et table2html
pour exporter L'objet précédemment montré R stats vers une table Word, Powerpoint ou HTML, par exemple:
install.packages("officer")
install.packages("rvg")
install.packages("openxlsx")
install.packages("ggplot2")
install.packages("flextable")
install.packages("xtable")
install.packages("rgl")
install.packages("stargazer")
install.packages("tikzDevice")
install.packages("xml2")
install.packages("broom")
install.packages("devtools")
library(devtools)
devtools::install_github("tomwenseleers/export")
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species,
size = Petal.Width, alpha = I(0.7))
graph2ppt(file="ggplot2_plot.pptx", width=6, height=5)
graph2doc(file="ggplot2_plot.docx", width=6, height=5)
# export of aov Anova output
fit=aov(yield ~ block + N * P + K, npk)
x=summary(fit)
table2ppt(x=x,file="table_aov.pptx")
table2doc(x=x,file="table_aov.docx")
Si quelqu'un trouve des bugs là laissez-moi savoir!
1 réponses
je viens de trouver la solution pratique suivante pour être en mesure d'exporter un tracé R dans le périphérique graphique actuellement actif à Powerpoint ou Word (ou LibreOffice Impress/Writer) dans le format modifiable (DrawingML) vector comme un one-liner, avec un support complet pour la transparence, etc :
export2office = function(file = "plot", type="PPT", scaling = 90, aspectr=NULL, vector.graphic = TRUE, fontname = "Arial", pointsize=20) {
file=sub("^(.*)[.].*", "\1", file)
if (type=="PPT"|type=="PPTX") {ext=".pptx";type="PPT"} else {ext=".docx";type="DOC"}
require(ReporteRs)
captureplot = function() {p = invisible(recordPlot())
return(p)}
p = captureplot()
plotsize = dev.size()
plotaspectr = plotsize[[1]]/plotsize[[2]]
if (!is.null(aspectr)) plotaspectr=aspectr
myplot=function(pl=p) print(pl)
if (type=="PPT") {doc = pptx();doc = addSlide(doc, slide.layout = "Blank");pagesize = dim(doc)$slide.dim} else {doc = docx();pagesize = dim(doc)$page-dim(doc)$margins[c(4,3)]}
pageaspectr = pagesize["width"]/pagesize["height"]
if (pageaspectr>plotaspectr) {xf=plotaspectr/pageaspectr;yf=1} else {xf=1;yf=pageaspectr/plotaspectr}
w = (scaling/100)*pagesize["width"]*xf;
h = (scaling/100)*pagesize["height"]*yf
if (type=="PPT") {doc = addPlot( doc, myplot, vector.graphic = vector.graphic, fontname = fontname, pointsize = pointsize,
offx = (pagesize["width"]-w)/2, offy = (pagesize["height"]-h)/2,
width = w, height = h) } else {doc = addPlot( doc, myplot, vector.graphic = vector.graphic, fontname = fontname, pointsize = pointsize,
width = w, height = h)}
writeDoc( doc, paste0(file,ext) )
}
export2ppt = function(type="PPT", ...) export2office(type=type,...)
export2doc = function(type="DOC", ...) export2office(type=type,...)
Exemple pour exporter lattice
plot:
library(effects)
fit=lm(prestige ~ type + income*education, data=Prestige)
plot(Effect(c("income", "education"), fit),multiline=T, ci.style="bands")
export2ppt("effect plot.pptx")
qui après clic droit dans PPT sur "ungroup" peut être vu pour être bien dans le vecteur format:
Exemple pour exporter ggplot2
plot de Powerpoint ou Word:
require(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
export2ppt(file="plot.pptx")
export2ppt(file="plot.pptx",aspectr=1.7,fontname="Times New Roman")
export2doc(file="plot.docx")
export2doc(file="plot.docx",aspectr=1.7)
Exporter de la base de R parcelles:
boxplot(mpg~cyl,data=mtcars, main="Car Milage Data",xlab="Number of Cylinders", ylab="Miles Per Gallon",col="cyan2")
export2ppt(file="boxplot.pptx",aspectr=1.5)
heatmap(as.matrix(eurodist))
export2ppt(file="heatmap.pptx")
Si aspectr
est nul les fonctions ci-dessus exporteront vers Word ou PPT dans le rapport courant de l'aspect de la parcelle dans le dispositif, sinon il exportera avec le rapport d'aspect donné, en utilisant l'échelle donnée (comme un % de la largeur totale ou la hauteur de la diapositive ou du document hors marges). De Word ou PPT ces graphiques exportent aussi parfaitement à (format vectoriel) PDF en utilisant le fichier...Enregistrer sous...PDF, et il est beaucoup plus facile de faire des modifications mineures à la mise en page que ce qui est possible en éditant directement dans le PDF.
Une autre option append=TRUE
ou FALSE
pour ajouter ou remplacer un fichier donné pourrait encore être nice même si.
si les personnes du noyau R souhaitent inclure cette fonctionnalité dans grDevices
veuillez ne serait super pratique pour une utilisation dans la salle de classe, je pense que, compte tenu de la domination et de l'utilisation de la suite Office!
EDIT: j'ai maintenant enveloppé une fonction similaire à celle ci-dessus dans un petit paquet export
:
https://github.com/tomwenseleers/export