R语言直接将图片导出至pptx或docx

Python021

R语言直接将图片导出至pptx或docx,第1张

在之前学习的时候,老师有推荐"export"这个神器可以将图片直接导出至ppt,但是发现3.6及4.0版本的R语言仍然无法使用export。

因此,切换至另外一个叫"eoffice"的package。

安装eoffice

报错

查看错误内容是因为没有安装Magick++

按照提示安装libmagick++-dev

再次安装effice

注:最近发现新版本的devEMF不兼容,如果发现缺少devEMF,并报错:Makeconf:176: recipe for target 'devEMF.o' failed make: *** [devEMF.o] Error 1,需要参见 https://www.jianshu.com/p/fd5857f5a06f 手动安装devEMF旧版本

之后就可以加载

保存至ppt可使用topptx

保存至doxc可使用todocx

支持多处方式输出图片

也支持表格从ppt或者word的输出和读取

以及输出多种图片格式

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

不知道你问的是在同一图形中添加点(类似画散点图)还是要把屏幕一分为多。

添加的话,用完plot,添加点用points,添加线用lines。

简单点的应用类似:

plot(X,Y)

points(X,Y1)

这样的感觉。

一分为多的话,用split.screen。

上我自己最近写的代码做个例子:

jpeg(filename="geeseP3.jpeg") #画jpeg图

split.screen(c(1,2)) #分屏幕为左右两边

screen(1) #屏幕1预备输出

plot(X2,Y,type="p",xlab="X2",ylab="Y",main="Plotting of X2 and Y")

screen(2) #屏幕2预备输出

plot(X2,Y,type="l")

dev.off()