r语言读写word_R语言:在word中插入ggplot

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

1. Introduction​cran.r-project.org
3f62ab16497b4577e19a7f06ca320331.png

这次主要试试在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`.

出图如下:

478564f09f1e4c059158daf8f552e759.png

拼图用的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的文件:

333d5f88b5cd38af4e2f48644556e7f3.png

这么方便的工具,排版当然不可能帮你一次排好的。要自己调长宽,并且像图中有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`.

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hamburger组件_一个侧边栏导航组件实现思路

翻译&#xff1a;布兰作者&#xff1a;Adam Argyle来源&#xff1a;https://web.dev/building-a-sidenav-component/在这篇文章中&#xff0c;我想和大家分享我是如何为 web 原型化一个 Sidenav 组件的&#xff0c;这个组件是响应式的&#xff0c;有状态的&#xff0c;支持键盘…

centos php mysql 5.6 安装_centos7安装nginx、php5.5、mysql5.6

一、nginx1、安装yum install nginx2、启动systemctl start nginx关闭&#xff1a;systemctl stop nginx 重启&#xff1a;systemctl restart nginx 检查状态&#xff1a;systemctl status nginx3、测试浏览器直接访问http://ip,应该会看到以下界面&#xff1a;4、支持php打开/…

myeclipse怎么导入mysql驱动_myeclipse sql导入数据库驱动包

如何配置strutshibernate&#xff0c;基本使用方法不少童鞋在自学SSH框架的时候&#xff0c;难在创建第一个项目&#xff0c;如何搭建好这些框架&#xff0c;很多书上只是给出了代码但是没有教如何使用&#xff0c;所以在本次博客中将会图文结合来说一下如何使用struts结合hibe…

mysql 报表统计sql使用实例_mysql 案例~mysql元数据的sql统计

一 简介:今天我们来收集下提取元数据的sql二 前沿: information_schema 引擎 memory 元数据收集表三 sql语句:1#没有使用索引的表统计SELECT t.TABLE_SCHEMA,t.TABLE_NAME,t.TABLE_ROWS FROM information_schema.tables AS t LEFT JOIN (SELECT DISTINCT table_schema, table_…

创建或更改表 tablename 失败_mysql 创建用户

一. 创建用户命令:CREATE USER usernamehost IDENTIFIED BY password;说明&#xff1a;username&#xff1a;你将创建的用户名host&#xff1a;指定该用户在哪个主机上可以登陆&#xff0c;如果是本地用户可用localhost&#xff0c;如果想让该用户可以从任意远程主机登陆&#…

linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案

1.vim /etc/my.cnf[mysqld]skip-grant-tables ##追加此行&#xff0c;跳过权限表&#xff0c;2.重启mysqlsystemctl restart mysqld3.mysql 登陆mysqlmysql> use mysql;mysql> UPDATE user SET Password password ( ‘zha123456‘ ) WHERE User ‘root‘ ;mysql> fl…

sql2000 mysql 兼容_SQL Server2000如何恢复数据库

以里诺仓库管理软件(SQL网络版)为例&#xff0c;如果您因电脑操作系统重装&#xff0c;需要把以前备份的数据库恢复过来&#xff0c;请您按如下操作来。首先&#xff0c;您需要安装MS SQL Server2000。1. 以Windowns XP为例&#xff0c;SQL Server个人版安装完成后&#xff0c;…

suse下删除mysql_每日MySQL之005:SUSE linux下卸載MySQL

卸載這里的卸載&#xff0c;對應於之前的安裝停止MySQL服務&#xff1a;db2a:~ #service mysql stop找到所有的MySQL包&#xff1a;db2a:~ #rpm -qa | grep -i mysqlmysql-community-server-5.7.19-1.sles11mysql-community-common-5.7.19-1.sles11libqt4-sql-mysql-4.6.3-5.34…

java中br.readline_Java:java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行&#xff0c;处理后输出&#xff0c;如果用以下方法&…

java dfs_Java数据结构与算法 深搜(DFS)的简单使用(一)之排列组合

今天&#xff0c;我们来简单介绍一下深度优先搜索(DFS)的概念和使用。在百度词条中&#xff0c;对深搜的解释是这样的。百度词条中的解释由此&#xff0c;我们可知&#xff0c;深搜是广泛运用到 图 中的搜索方法之一。用深度优先搜索遍历图的基本思路是&#xff1a;(1)访问顶点…

java数组元素是类_Java数组及其常用类

本文由疯狂软件教育中心整理&#xff0c;更多Java等高新技术&#xff0c;疯狂软件期待与你交流。一、JAVA中的数组(1)数组的定义&#xff1a;是有相同类型的、用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列。数组是一种最简单的复合数据类型。数组可以是一维…

java 数组 equals_java中用equals比较两个内容相同的字符数组

********************************************你在数组上调用函数equals,比较的是c和ch的地址改成if(Arrays.equals(ch,c));就可以比较c和ch的内容了********************************************java.sun.com上说&#xff0c;The equals method for class Object implements…

java ssh pdf_JavaSSH框架技术规范.pdf

航安项目(三期)框架技术规范日期 版本 简述 作者2011年3月1 日 V1.0 指定本系统的技术规范2011年9月25 日 V2.0 指定本系统的技术规范框架技术规范航安项目框架技术规范 目录1、规范配置说明12、系统三层架构规范配置说明12.1 Dao22.2 Entity42.3 Service43、Spring 规范配置说…

java 线程执行结束_Java_如何等待子线程执行结束

本程序的数据有可能是如下:main thread work startsub thread start working.main thread work done.now waiting sub thread done.sub thread stop working.now all done.忽略标号, 当然输出也有可能是1和2调换位置了. 这个我们是无法控制的. 我们看下线程的join操作, 究竟干了…

mysql将时间轴转化为时间_MySQL日期计算及格式转换有关问题

mysql日期计算及格式转换问题2012-06-09 21:08 MySQL日期计算及格式转换问题做开发的时候经常会碰到以下几个问题使用mysql的内置函数将时间轴转成对应的日期方法一&#xff1a;使用from_unixtime(unix_timestamp)函数即可实现&#xff0c;如&#xff1a;SELECT FROM_UNIXTIME(…

java 配置文件加密_Java在配置文件中加密密码?

小编典典一种简单的方法是在Java中使用基于密码的加密。这使你可以使用密码来加密和解密文本。这基本上意味着初始化一个javax.crypto.Cipherwith算法"AES/CBC/PKCS5Padding"并从javax.crypto.SecretKeyFactory该"PBKDF2WithHmacSHA512"算法获取密钥。这是…

java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?

这几天在各大平台上都看到过这样一些帖子&#xff0c;全都是关于String类型对象不可变的问题&#xff0c;当然现在也是找工作的准备时期&#xff0c;因此花了一部分时间对其进行整理一下。想要完全了解String&#xff0c;在这里我们需要解决以下几个问题(1)什么是不可变对象&am…

java socket android_Android:这是一份很详细的Socket使用攻略

前言Socket的使用在 Android网络编程中非常重要今天我将带大家全面了解 Socket 及 其使用方法目录示意图1.网络基础阅读本文前&#xff0c;请先了解 关于计算机网络基础&#xff0c;如计算机体系结构、TCP、UDP等知识2. Socket定义即套接字&#xff0c;是应用层 与 TCP/IP 协议…

内构函数java_Android JNI参数传递

Java中调用native函数传递的参数是Java数据类型&#xff0c;到了JNI层需进行数据类型转换&#xff0c;基本数据类型是在前面加个j&#xff0c;如int——>jint&#xff0c;应用数据类型除了基本数据类型的数据、Class、String和Throwable外&#xff0c;其余所有Java对象的数据…

java 垃圾回收机制_Java的垃圾回收机制

前言在C语言中, 程序员必须小心谨慎的处理每一项内存分配, 且内存使用完后必须手动释放曾经占用的内存空间。当内存释放不够完全时, 即存在分配但永不释放的内存块, 就会引起"内存泄漏"问题。而在Java语言中, 它给了程序员一个美好的承诺: 程序员无需管理内存, 因为J…