在之前學(xué)習(xí)的時(shí)候,老師有推薦"export"這個(gè)神器可以將圖片直接導(dǎo)出至ppt,但是發(fā)現(xiàn)3.6及4.0版本的R語(yǔ)言仍然無(wú)法使用export。
因此,切換至另外一個(gè)叫"eoffice"的package。
安裝eoffice
install.packages("eoffice")
報(bào)錯(cuò)
ERROR:configuration failedforpackage‘magick’Warningininstall.packages:installation ofpackage‘magick’ had non-zero exit statusERROR:dependency ‘magick’isnot availableforpackage‘eoffice’Warningininstall.packages:installation ofpackage‘eoffice’ had non-zero exit status
查看錯(cuò)誤內(nèi)容是因?yàn)闆](méi)有安裝Magick++
Configurationfailed tofindtheMagick++library.Tryinstalling:-deb:libmagick++-dev(Debian,Ubuntu)-rpm:ImageMagick-c++-devel(Fedora,CentOS,RHEL)-csw:imagemagick_dev(Solaris)-brew imagemagick@6(MacOS)
按照提示安裝libmagick++-dev
sudo apt-getinstall libmagick++-dev
再次安裝effice
install.packages("eoffice")
注:最近發(fā)現(xiàn)新版本的devEMF不兼容,如果發(fā)現(xiàn)缺少devEMF,并報(bào)錯(cuò):Makeconf:176: recipe for target 'devEMF.o' failed make: *** [devEMF.o] Error 1,需要參見(jiàn)http://www.itdecent.cn/p/fd5857f5a06f手動(dòng)安裝devEMF舊版本
之后就可以加載
library(eoffice)
保存至ppt可使用topptx
topptx(filename ="mtcars.pptx")
保存至doxc可使用todocx
todocx(filename = "mtcars.docx")
支持多處方式輸出圖片
p <- ggplot(mtcars, aes(mpg, disp, color = factor(cyl))) + geom_point()topptx(p, filename = "mtcars.pptx"), width = 6, height = 4)
也支持表格從ppt或者word的輸出和讀取
totable(head(mtcars), filename = "mtcars.pptx")
以及輸出多種圖片格式
tofigure(p, filename = "mtcars.pdf")
最近遇到一個(gè)問(wèn)題,R語(yǔ)言中畫的圖怎么導(dǎo)出到PPT可以便于其他同事后續(xù)編輯?
為解決這個(gè)問(wèn)題,大體上有兩種思路:
思路一是將數(shù)據(jù)按照PPT適宜的格式導(dǎo)出,再用PPT里自帶的圖表工具,通過(guò)編輯數(shù)據(jù)即可畫圖,缺點(diǎn)在于已經(jīng)畫好了圖還得重新在PPT里畫一遍,如果是一些比較復(fù)雜的圖形,使用PPT未必能快速完成。
思路二是想辦法將R的圖對(duì)象直接導(dǎo)出為PPT可編輯的對(duì)象,這樣會(huì)比較便捷
這篇文章主要講講思路二的具體實(shí)現(xiàn)方法,總體上是借助{officer}這個(gè)包【可直接跳到方法3】。如未安裝請(qǐng)先:
install.packages("officer")
library(officer)
方法1(僅能插入圖片到PPTX中):
library(ggplot2)
library(tidyverse)
# 用iris數(shù)據(jù)畫個(gè)簡(jiǎn)單的散點(diǎn)圖
g = ggplot(iris,
? ? ? ? ? aes(x = Sepal.Length, y = Sepal.Width)) +
? ? geom_point(aes(color = Species))
# 這里使用officer包的相關(guān)函數(shù)將畫圖形成的ggplot對(duì)象賦值給doc
doc <- read_pptx() %>%
? ? ? add_slide() %>%
? ? ? ph_with(value = g, location = ph_location_fullsize())
# 導(dǎo)出pptx文件
print(doc, target = "iris.pptx")
找到剛剛生成的iris.pptx文件,發(fā)現(xiàn)居然只是個(gè)圖片!看來(lái)這個(gè)方法只適用于想直接生成圖片進(jìn)PPT文件。

方法2(半可編輯):
借助rvg包
library(rvg)
# 用iris數(shù)據(jù)畫個(gè)簡(jiǎn)單的散點(diǎn)圖
g = ggplot(iris,
? ? ? ? ? aes(x = Sepal.Length, y = Sepal.Width)) +
? ? geom_point(aes(color = Species))
# 將這個(gè)ggplot對(duì)象轉(zhuǎn)化成可編輯的對(duì)象
editable_graph <- dml(ggobj = g)
# 導(dǎo)出到pptx
doc <- read_pptx() %>%
? add_slide() %>%
? ph_with(value = editable_graph,location = ph_location_fullsize()) %>%
? print(target = "iris2.pptx") # 這里對(duì)導(dǎo)出步驟做了簡(jiǎn)化,本質(zhì)上和方法1一樣
發(fā)現(xiàn)生成的圖片似乎是可以編輯了,可以選中里面的每一個(gè)點(diǎn)、文本、圖形,但這種圖片充其量也只是把ggplot的圖改成了各種形狀和文本框的組合,不是PPTX原生的那種圖表。
PS:另一個(gè)包叫eoffice有同樣的作用,作者也說(shuō)了eoffice就是基于officer包來(lái)的。

方法3(可編輯):
借助mschart包,替代ggplot2以生成pptx可解析的圖表對(duì)象:
library(mschart)
# 畫圖,指定數(shù)據(jù)、軸和系列
scatter <-
? ms_scatterchart(
? ? data = iris, x = "Sepal.Length",
? ? y = "Sepal.Width", group = "Species"
? )
# 設(shè)定圖形參數(shù)
scatter <- chart_settings(scatter, scatterstyle = "marker")
# 導(dǎo)出
doc <- read_pptx() %>%
? ? ? add_slide(layout = "Title and Content", master = "Office Theme") %>%
? ? ? ph_with(value = scatter, location = ph_location_fullsize()) %>%
? ? ? print(target = "iris3.pptx")
在PPT中生成了一個(gè)比較美觀的圖:

點(diǎn)擊右鍵發(fā)現(xiàn)的確可以編輯數(shù)據(jù),插入了原生的microsoft圖表!大功告成!

總結(jié)
借助于mschart和officer包即可實(shí)現(xiàn)該需求,但是對(duì)mschart后續(xù)研究發(fā)現(xiàn),這個(gè)包目前僅支持折線圖、柱形圖、面積圖和散點(diǎn)圖(20210718),豐富度相比于ggplot2還有待提升。
