Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redirecting R graphs to MS Word

Tags:

r

I wonder how to redirect R graphs to MS Word? Like sink() redirect the R output to any file but not the graphs. I tried R2Wd but sometimes it doesn't work properly. Any comment and help will be highly appreciated. Thanks

like image 678
MYaseen208 Avatar asked Aug 27 '11 04:08

MYaseen208


People also ask

How do I copy R code to Word?

How can I copy the output of the R console into a word document? Select what you want in the console and copy. Then in Word paste using Keep Text Only. (Right click to get the paste options.)

How do I export a figure in R?

Plots panel –> Export –> Save as Image or Save as PDF It's also possible to save the graph using R codes as follow: Specify files to save your image using a function such as jpeg(), png(), svg() or pdf(). Additional argument indicating the width and the height of the image can be also used.


2 Answers

To answer your direct question, the best way to get the results of R scripts and plots into word is probably via some form of Sweave. Look up odfweave to send R output to a LibreOffice file that can then be converted to word, or even opened directly in Word if you have the right plugin.

To create plots that can be editable (i.e you can alter the look of plots, move the legend etc) I would recommend saving the plot to an svg format (scalable vector graphic) that you can then edit using the excellent free vector graphics app inkscape.

For instance, if I create my ggplot2 graph as an object

library(ggplot2)
dataframe<-data.frame(fac=factor(c(1:4)),data1=rnorm(400,100,sd=15))
dataframe$data2<-dataframe$data1*c(0.25,0.5,0.75,1)
testplot<-qplot(x=fac, y=data2,data=dataframe, colour=fac, geom=c("boxplot", "jitter"))

You can use the Cairo package, which allows creation of svg files, I can then edit these in Inkscape.

library(Cairo)
Cairo(600,600,file="testplot.svg",type="svg",bg="transparent",pointsize=8, units="px",dpi=400)
testplot
dev.off()
Cairo(1200,1200,file="testplot12200.png",type="png",bg="transparent",pointsize=12, units="px",dpi=200)
testplot
dev.off()

For more info read this previous question that has more good answers Create Editable plots from R

Also, you can follow this advice from Hadley, and save the actual ggplot2 object, then load it later and modify it

save(testplot, file = "test-plot.rdata")
# Time passes and you start a new R session
load("test-plot.rdata")
testplot + opts(legend.position = "none")
testplot + geom_point()
like image 193
PaulHurleyuk Avatar answered Oct 04 '22 03:10

PaulHurleyuk


To get sink() like behavior with MSword look at the wdTxtStart function in the TeachingDemos package. This uses R2wd internally, so you will see similar functionality, this just sends everything you do to the word document.

Graphs are not sent automatically since you may be adding to them, but once you know you are finished with the graph you can use wdtxtPlot to send the current graph to the word document.

If you know what you want to do ahead of time then sweave or something similar is probably the better approach (as has already been mentioned). The group that created Rexcel are also working on Sword that does sweave like things within MSword.

like image 32
Greg Snow Avatar answered Oct 04 '22 02:10

Greg Snow