Ответ 1
Просто нашел следующее удобное решение, позволяющее экспортировать R-график в текущем активном графическом устройстве в Powerpoint или Word (или LibreOffice Impress/Writer) в редактируемом (DrawingML) векторном формате в виде однострочного изображения с полным поддержка прозрачности и т.д.:
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,...)
Пример экспорта 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")
который после щелчка правой кнопкой мыши в PPT на "ungroup" можно увидеть красиво в векторном формате:
Пример экспорта ggplot2
графика в Powerpoint или 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)
Экспорт базовых графиков R:
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")
Если aspectr
равно NULL, перечисленные выше функции будут экспортироваться в Word или PPT в текущее соотношение сторон графика в устройстве, в противном случае оно будет экспортироваться с заданным соотношением сторон, используя заданное масштабирование (в% от общего количества ширина или высота слайда или документа, исключая поля). Из Word или PPT эти графики также отлично экспортируются в (векторный формат) PDF с помощью File... Save as... PDF, и намного легче сделать небольшие изменения в макете, чем это возможно, непосредственно редактируя PDF.
Еще одна опция append=TRUE
или FALSE
для добавления или перезаписывания данного файла все равно может быть приятной.
Если люди R Core хотели бы включить эту функциональность в grDevices
, пожалуйста, сделайте - было бы очень удобно для использования в классе, я думаю, учитывая доминирование и широкое использование пакета Office!
EDIT: теперь я обернул функцию, аналогичную приведенной выше в небольшом пакете export
:
https://github.com/tomwenseleers/export