export包:将R语言的图表对象导出为PPT格式,再也不需用Ai作图了

获取更好阅读体验:export包:将R语言的图表对象导出为PPT格式,再也不需用Ai作图了

1. 前言

R语言特别是R包ggplot2,可以制作出精美的图片,但有时也不尽人意,需要我们后期手动编辑。

一般是保存为PDF矢量图再导入到AI里进行编辑,但Ai(Adobe illustrator)有的伙伴不会用,或者没安装、太卡顿了,那有没有可以替代的方法呢?

答案就是使用R包export,它可以将R的绘图对象保存为PPT格式。这样我们就可以快速对图片进行修改和添加元素了。

实不相瞒,我硕士期间发表的文章和毕业论文就是用这个包来拼图的,完全没用Ai,笑死。

2. 安装

依赖包有点多,主要是office相关的,不过安装还算顺利。

install.packages("officer")
install.packages("rvg")
install.packages("openxlsx")
install.packages("ggplot2")
install.packages("flextable")
install.packages("xtable")
install.packages("rgl")
install.packages("stargazer")
install.packages("tikzDevice")
install.packages("xml2")
install.packages("broom")
install.packages("devtools")
library(devtools)
devtools::install_github("tomwenseleers/export")

载入:

library(export)   

3. 图片输出PPT

这里以一个ggplot绘制的箱线图为例。

library(ggplot2)
iris$class = rep(c("A","B","C"), 50)
p <- ggplot(iris, aes(x = Species, y = Sepal.Length, color = class))
p <- p  + geom_boxplot(width = 0.6, outlier.shape=NA) + setText(20, graph.theme = "bw")
p

开始导出:

graph2ppt(p, file = "boxplot.pptx", width = 4, height = 4)
graph2pdf(p, file = "boxplot.pdf", width = 4, height = 4)
graph2png(p, file = "boxplot.png", width = 4, height = 4)
graph2tif(p, file = "boxplot.tif", width = 4, height = 4)
graph2doc(p, file = "boxplot.docx")

可以看出,可以导出的格式有pptx、pdf、png、tif和docx,pdf和png就不必说了,ggsave和png/pdf函数都能实现。

其中导出的pptx格式打开可以看到,这里不是一张图片,而是由许多小元素小图层所组成的。


这就允许我们进行编辑了,放大/缩小、旋转、移动、删除等等操作,非常的方便。

不过这也带来一个问题,就是图层太多时,或导致卡顿,我遇到的典型的案例就是绘制热图,一个tile就是一个元素,动不动就可以上万个元素了。

解决办法有几个,第一,避免全选元素,特别是整体移动,不选择元素时其实并不卡;第二,热图导出为PDF,坐标轴另外保存,这样可以保证各种标签还是可编辑状态,最后组合在一起就行了。

相信用Ai也会很卡,这么多元素谁也遭不住。

导出热图:

library(pheatmap)
mydata = iris
pdata = mydata[, 1:4]
rownames(pdata) = paste0("Sample-", 1:nrow(mydata))
annotation_row = data.frame(Species = as.character(iris$Species), row.names = rownames(pdata))
p <- pheatmap(pdata, 
         fontsize_col = 6,
         angle_col = 90,
         show_rownames = FALSE, 
         show_colnames = TRUE,
         scale = "row", 
         width = 15, 
         height = 15,
         cluster_cols = TRUE, 
         cluster_rows = TRUE,
         annotation_row  = annotation_row, 
         border_color = NA,
         annotation_names_row = TRUE
)
p

graph2ppt(p, file = "heatmap.pptx", width = 4, height = 4)


有时候分组图例会跑出边界、色阶不够长、色阶标签太少或不合适等等问题,都可以在PPT里解决。

另外,输出tif格式也是比较有用的,有些期刊要求图片格式是tif格式,以前我是用专门的转换软件手动转的,这里直接就能转,很方便。而且还能改变DPI:

graph2tif(p, file = "boxplot.tif", width = 4, height = 4, dpi = 1000)

默认是300,改成1000就清晰多了。

4. 非ggplot对象的输出

遗憾的是,这个包貌似只能接受ggplot对象,对于其他格式不太支持。

但是,我们还是有些方法进行转换的,比如Y叔的ggplotify::as.ggplot()函数可以帮助我们将其他类型的图形对象转换为ggplot格式。

如基础图形对象:

class(ggplotify::as.ggplot(~boxplot(iris[, 1:4])))
# 'gg' 'ggplot'
graph2ppt(ggplotify::as.ggplot(~boxplot(iris[, 1:4])), file = "base.pptx", width = 4, height = 4)

只需要在前面加个波浪号就行了。

更多转换可参考:

https://cran.r-project.org/web/packages/ggplotify/vignettes/ggplotify.html

5. 图片输出word

从上面可以看到图片也许输出到word文档,但一般不这样做,没啥作用。

有点作用的我觉得是表格输出word。

6. 表格输出word

表格输出word的功能不是export所具备的,但是我这里想到了,所以也提一下。

此功能可由officer包来实现。

library(officer)

doc = read_docx()
doc = body_add_table(doc, iris[1:10, ], style = "table_template")
print(doc, target = "output.docx")


看起来还不错,有潜力!

研究一下有哪些样式可以选择,应该是很方便的功能。

平时在word绘制表格都是先导出到excel里再粘贴到word里,再调格式,很是麻烦。

以前绘制三线表有用过table1包,不过已经忘了这么用了。。。


这期推送就分享到这里,如果老铁们有什么其他的骚操作,欢迎评论区留言讨论~


学习更多生信技巧,请持续关注【生信摆渡】。

觉得有帮助的朋友麻烦动动手指点个赞、分享和再看,下一期会更新更快哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值