R图片输出到office

在之前学习的时候,老师有推荐"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还有待提升。

你可能感兴趣的:(R图片输出到office)