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还有待提升。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容