R語(yǔ)言:圖片輸出到office

在之前學(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還有待提升。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容