最近CRAN上新了一个叫eoffice的package,并且不时被各路大佬提起。这个包的功能刚好也符合我最近的需求,这次带各位先来试试水。包的官方介绍:

1. Introduction​cran.r-project.org

这次主要试试在word中用该包插入ggplot。既然要试,图就整的复杂一点:

> rm(list = ls())
> gc()used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 2423917 129.5    4543915 242.7  4543915 242.7
Vcells 6168695  47.1   12255594  93.6 10143094  77.4
>
> pacman::p_load(data.table, magrittr, ggplot2, ggthemr, cowplot, stringr, dplyr, patchwork)
>
> library(eoffice)
> library(gridExtra)
>
> ggthemr('fresh')
>
> test<-mtcars %>% mutate(text = rownames(mtcars)) %>% data.table() %$%
+   .[,c('brand', 'model','tag'):=tstrsplit(text, split = ' ')]
> testsum<-test[,.(mpg = mean(mpg, na.rm = T), wt = mean(wt, na.rm = T)), by = 'brand'][1:5,]
>
>
> p1<-ggplot(test)+
+   geom_histogram(aes(x = mpg))+
+   coord_flip()+
+   scale_y_continuous(limits = c(0,8))+
+   annotation_custom(grob = tableGrob(testsum, rows = NULL),
+                     xmin = 25, xmax = 33, ymin = 5, ymax = 7)
> p2<-ggplot(test)+
+   geom_point(aes(x = disp, y = hp))
> p3<-ggplot(test)+
+   geom_hex(aes(x = drat, y = wt))
>
> p<-p1+(p2/p3)
> p
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

出图如下:

拼图用的patchwork,如何在图中插入表格请参考我之前写的文章:传送门。

然后按照官方介绍,直接用todocx把图片插入word:

> todocx(p, filename = 'D:/R/eoffice/testword.docx', width = 6.5, height = 5,
>        append = F)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Warning message:
dml_docx() is deprecated and will be removed in the next version (> 0.2.0), use devEMF::emf instead. 

注意:append设置为F的话,filename文件原有的内容会被完全覆盖!第一次尝试千万注意备份文件

提示一些警告,不过不要紧,看看filename的文件:

这么方便的工具,排版当然不可能帮你一次排好的。要自己调长宽,并且像图中有grob对象(就是那张表)的情况下,这些对象还要单独调整。

这玩意儿牛逼的地方在于,图片导出word的时候就是矢量图,所有元素都可以选中并编辑,像上图那样。但凡投过paper的都知道期刊会要求稿件里插图的矢量图,这个包在这方面可以为我们省下不少功夫。

不过这也有缺点,要是要素过多(例如大量数据的散点图),一般电脑打开这个word肯定死机。就上面那个图片,我的笔电打开word都已经有点卡了...

此外,如果导出的时候filename的文件已在word打开,就会报错:

> todocx(p, filename = 'D:/R/eoffice/testword.docx', width = 6.5, height = 5,
+        append = F)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Error in value[[3L]](cond) : Could not write "D:/R/eoffice/testword.docx" [zip error: `Cannot open zip file `D:/R/eoffice/testword.docx` for writing` in file `zip.c:373`]
此外: Warning messages:
1: In grob$wrapvp <- vp : 到达了流逝时间限制
2: dml_docx() is deprecated and will be removed in the next version (> 0.2.0), use devEMF::emf instead. 

将append设置为T,就可以在已存在的文档最后面插入图片了:

> todocx(p, filename = 'D:/R/eoffice/testword_2.docx', width = 6.5, height = 5,
+        append = T)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

这是一个挺大的word文档,里头还有各种追踪修订,也顺利导入了

总的来说,eoffice无法调整导出图片为栅格(例如jpeg),因此导出到word可能是eoffice最不适用的场景了。比较建议的用法还是每张图片单独存成一个ppt或pdf。

r语言读写word_R语言:在word中插入ggplot相关推荐

  1. C语言:向一个有序数组中插入一个数据,并保持数组的有序性。

    C语言:向一个有序数组中插入一个数据,保持数组的有序性. #include <stdio.h> //向一个有序数组中插入一个元素,重新实现有序,并输出. int main() {//注意数 ...

  2. 代码放进word_在Word中插入代码并高亮显示(针对会编程的小伙伴)

    有的时候需要将代码插入到文档当中,而你又不熟悉专门的排版语言.或者说只是临时需要.其实可以在Word中插入代码并使之进行高亮显示,达到和专用排版工具大致一样的效果,使代码的阅读体验更好. 如下图所示, ...

  3. 如何向Word中插入代码块

    如何向Word中插入代码块 对于一些用Word写的论文,作业中如果要插入代码,无论是直接复制粘贴还是加上灰色无边框的效果看上去十分不美观, 优雅的插入代码块给别人的印象就会好很多. 思路:将代码块的原 ...

  4. 计算机绘制表格教案,word中插入表格教案

    篇一:word中插入表格教学反思 <Word表格的制作>教学反思 计算机课程对于培养学生的科学精神.创新精神和实践能力,提高学生对信息社会的适应能力等方面都具有重要的意义.在计算机课的教学 ...

  5. 在word中插入公式并给公式编号

    插入公式和设置编号: 在word中插入公式应当说相当简单了,可能你会想到用:插入->公式 但该方法插入公式有很大的弊端,比如说,看上去并不是很好看,比如说引用起来不方便,比如说LaTeX支持不全 ...

  6. 如何在word中插入比较好看的代码

    在word中插入比较好看的代码 方法一:直接用word 特点: 有格式,外侧有隐形的边框 方法: 点击插入→对象(文本区域)→对象类型中选择OpenDocument Text→点击确定 弹出一个新的界 ...

  7. 在word中插入高亮代码

    在写文档的时候特别是技术文档,经常需要在word中插入代码, 直接复制代码的话不是很美观,于是去网上学来一个工具,先附上在线网址:http://www.planetb.ca/syntax-highli ...

  8. 使用Aurora在Word中插入算法伪代码教程,亲测有效,写论文必备

    1. 安装Aurora和miktex软件 安装miktex,附百度网盘链接链接:https://pan.baidu.com/s/12l_88pDKmoIBESJ_Kek85Q  提取码:v0t5 下载 ...

  9. word中插入带入带有上标和下标的字符串

    转载:由于工作的需求,需要在word中插入带入带有上标和下标的字符串,比如这样的一个字符串:SO₄²⁻(mg/L).在网上搜了好久,终是摸索出点思路. 解决办法:使用转义字符加Unicode的HexE ...

最新文章

  1. 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践
  2. 字符串相似度匹配算法python_算法字符串相似度得分/哈希
  3. ajax实现两个aspx跳转,请问ajax执行成功后可以跳转到另一个页面吗?
  4. Vue的过滤器,生命周期的钩子函数和使用Vue-router
  5. Java面试题详解二:java中的关键字
  6. 公寓式楼房宜南北走向
  7. Hive SQL面试题(附答案)
  8. 手把手教会你mp3音频转文字怎么操作,快来码住
  9. ocata版本vlan模式配置【ovs】
  10. html里用js实现随机抽奖,javascript实现随机抽奖功能
  11. H264中一些很有用的解释
  12. 贪心科技机器学习训练营(三)
  13. 20181012 excel 填充序列 快捷键
  14. Java中的UTF-8、UTF-16编码字符所占字节数
  15. jetson nano-mavros-px4
  16. xinxin - 初步学习tkinter
  17. JPS网页中文乱码解决方案
  18. 【深度学习】【物联网】深度解读:深度学习在IoT大数据和流分析中的应用
  19. 【广州芯享家】服务器维护过程中,你需要了解的5个小常识
  20. Springboot集成rabbitmq实现延时队列

热门文章

  1. php异步轮询如何实现,深入剖析JavaScript异步之事件轮询
  2. python支持gui编程_Python GUI编程完整示例
  3. redmine两个mysql_Redmine3.4.2安装记(Win10+MySql)
  4. UE4异步编程专题 - TFunction
  5. C语言的putpiel函数,C语言graphics.h函数介绍
  6. android 5.0.1 libdvm.so,Android逆向进阶—— 脱壳的奥义(基ART模式下的dump)
  7. 是人是谁_其实,我们每个人心中都有一把尺子,谁好谁歹谁心里都明白……
  8. c++邮递员投递经过特定点_厉害了斑马鱼,动物实验体天团C位
  9. 【转】Azure应用部署方式对比
  10. 【转】ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET