杀杀
发一些拼图的小技巧
拼图之前,先要根据自己图片的张数,设置好画布大小,这很重要
我画图的经验中,正常一张方形的图会设置为width和height都等于5,如果两张横着拼在一起,就会设画布为105;如果拼6张图,一行三张,则设为1510,以此类推,当然画图的时候也可以自己尝试,根据实际情况调整。
options(repr.plot.width = 5,repr.plot.height = 5) #运行代码会改变当前R环境中默认画布
设置好画布,准备好图片就可以开始拼图啦
ggplot拼图(非生存分析的普通图,如柱状图,折线图等)
1. R包patchwork
这个包可以针对非生存分析的拼图。加载包之后,可以直接用+ - * / 的运算符号进行拼图。
但是要注意,必须严格按照运算规则一步步来。
patchwork中我比较习惯用的两个符号是+(加号)和/(除号),因为当我们计算时,1+1,看起来就像两个1并排站立,1/2 写在纸上的时候,是1在上面,2在下面,是上下排列。用这个规律来记忆这个拼图函数的用法,+就是把两个图横着拼,/ 就是竖着拼。
先来看看不设置画布的效果,默认是55
会很奇怪,但设置画布为宽10高5后 就正常了。竖着拼也可以,先将画布设为510接下来简单介绍一下拼6张图,更多的就以此类推啦。首先设置画布为15*10
(a+b+c)/(d+e+f) #一定要加括号,严格按照运算规则来
顺便有几个附加功能,如添加主题风格,添加空白画布
嵌套多种布局,将画布分配不同比例给每个子图
(a+b+c)/(d+e+plot_spacer()) #当图片是奇数时添加空白画布
(a+b+c)/(d+e+plot_spacer()) & theme_bw() #使用&添加主题(风格同ggplot)
a/(b+(c/d)) #使用多重嵌套,达到自己想要的布局效果
a+b+plot_layout(ncol = 1, heights = c(3, 1))
#不想图片都是一样大的,使用plot_layout来设置高度/宽度的分配
#这边为a分配了四分之三的高,而b只有四分之一。
生存分析拼图
拼生存分析时,普通的函数可能不适用。需要用生存分析的拼图函数
第一步还是修改画布!我这里有8个图,我要画成两行四列
options(repr.plot.width = 20,repr.plot.height = 10)
首先创建一个list,把你的图都放进去
有个小建议就是创建很多图的时候,按如下方式横着写代码。因为它是默认先上下后左右的方式来排布图的,代码这样写,你就知道你的哪个图在哪个位置了。
library(survival)
library(survminer)
#需要的R包
splots <- list() #创建空列表
splots[[1]] <- a; splots[[3]] <- c; splots[[5]] <- e; splots[[7]] <- g
splots[[2]] <- b; splots[[4]] <- d; splots[[6]] <- f; splots8[[8]] <- h
#然后可以用arrange_ggsurvplots函数绘制拼图
p1 <- arrange_ggsurvplots(splots, print = TRUE, ncol = 4, nrow = 2)
就完成啦,生存分析是不需要添加空白的,如果是奇数的话,会自动添加空白。
最后说一下输出图片
建议使用ggsave,输出时可以设置画布,这里的画布和你在写代码预览的时候是一样的比例,如果你在预览时觉得满意了,输出时就直接按照这样的画布大小保存矢量图,便于使用。
ggsave(filename="beautiful.pdf", plot=p1, width=20, height=10, units="in")
参考链接:
https://www.jianshu.com/p/622fff119eb4
https://www.jianshu.com/p/0249d53383db
https://www.jianshu.com/p/e38201a3e4f7
网友评论