美文网首页R语言R
R图片输出到office

R图片输出到office

作者: ChrisJO | 来源:发表于2022-02-06 11:08 被阅读0次

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

        本文链接:https://www.haomeiwen.com/subject/vodukrtx.html