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

生信摆渡 2024-10-17 16:01:02 阅读 79

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

1. 前言

R语言特别是R包<code>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

开始导出:

<code>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也会很卡,这么多元素谁也遭不住。

导出热图:

<code>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:

<code>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里,再调格式,很是麻烦。

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


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


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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。