在之前学习的时候,老师有推荐"export"这个神器可以将图片直接导出至ppt,但是发现3.6及4.0版本的R语言仍然无法使用export。
因此,切换至另外一个叫"eoffice"的package。
安装eoffice
install.packages("eoffice")
报错
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
查看错误内容是因为没有安装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")
注:最近发现新版本的devEMF不兼容,如果发现缺少devEMF,并报错:Makeconf:176: recipe for target 'devEMF.o' failed make: *** [devEMF.o] Error 1,需要参见https://www.jianshu.com/p/fd5857f5a06f手动安装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")
最近遇到一个问题,R语言中画的图怎么导出到PPT可以便于其他同事后续编辑?
为解决这个问题,大体上有两种思路:
思路一是将数据按照PPT适宜的格式导出,再用PPT里自带的图表工具,通过编辑数据即可画图,缺点在于已经画好了图还得重新在PPT里画一遍,如果是一些比较复杂的图形,使用PPT未必能快速完成。
思路二是想办法将R的图对象直接导出为PPT可编辑的对象,这样会比较便捷
这篇文章主要讲讲思路二的具体实现方法,总体上是借助{officer}这个包【可直接跳到方法3】。如未安装请先:
install.packages("officer")
library(officer)
方法1(仅能插入图片到PPTX中):
library(ggplot2)
library(tidyverse)
# 用iris数据画个简单的散点图
g = ggplot(iris,
aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point(aes(color = Species))
# 这里使用officer包的相关函数将画图形成的ggplot对象赋值给doc
doc <- read_pptx() %>%
add_slide() %>%
ph_with(value = g, location = ph_location_fullsize())
# 导出pptx文件
print(doc, target = "iris.pptx")
找到刚刚生成的iris.pptx文件,发现居然只是个图片!看来这个方法只适用于想直接生成图片进PPT文件。
方法2(半可编辑):
借助rvg包
library(rvg)
# 用iris数据画个简单的散点图
g = ggplot(iris,
aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point(aes(color = Species))
# 将这个ggplot对象转化成可编辑的对象
editable_graph <- dml(ggobj = g)
# 导出到pptx
doc <- read_pptx() %>%
add_slide() %>%
ph_with(value = editable_graph,location = ph_location_fullsize()) %>%
print(target = "iris2.pptx") # 这里对导出步骤做了简化,本质上和方法1一样
发现生成的图片似乎是可以编辑了,可以选中里面的每一个点、文本、图形,但这种图片充其量也只是把ggplot的图改成了各种形状和文本框的组合,不是PPTX原生的那种图表。
PS:另一个包叫eoffice有同样的作用,作者也说了eoffice就是基于officer包来的。
方法3(可编辑):
借助mschart包,替代ggplot2以生成pptx可解析的图表对象:
library(mschart)
# 画图,指定数据、轴和系列
scatter <-
ms_scatterchart(
data = iris, x = "Sepal.Length",
y = "Sepal.Width", group = "Species"
)
# 设定图形参数
scatter <- chart_settings(scatter, scatterstyle = "marker")
# 导出
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中生成了一个比较美观的图:
点击右键发现的确可以编辑数据,插入了原生的microsoft图表!大功告成!
总结
借助于mschart和officer包即可实现该需求,但是对mschart后续研究发现,这个包目前仅支持折线图、柱形图、面积图和散点图(20210718),丰富度相比于ggplot2还有待提升。