【R画图学习17.1】拼图软件1---patchwork

藏宝库编辑 2024-9-10 12:31:53 33 0 来自 中国
实在前面在学习的时间也陆连续续的用过一些拼图的包,像par,cowplot,patchwork等。但是,感受下来好像最好用的照旧patchwork,以是本日具体的学习一下。由于最新版本内里支持将ggplot与non-ggplot对象举行拼接。而且另有别的很多长处:可以给子图添加标志(ABCD...);可以将子图的图例移到一起;可以同一修改子图;也可以直接p1+p2出图等。
我们用自带的mtcars为例子,画4个简朴的图。
library(ggplot2)
library(ggsignif)
library(patchwork)
p1 <- ggplot(mtcars)+
geom_point(aes(mpg,disp))+
ggtitle("plot 1")
p2 <- ggplot(mtcars)+
geom_boxplot(aes(gear,disp,group=gear))+
ggtitle("plot 2")
p3 <- ggplot(mtcars)+
geom_point(aes(hp,wt,colour=mpg))+
ggtitle("plot 3")
p4 <-ggplot(mtcars)+
geom_bar(aes(cyl))+
facet_wrap(~gear)+
ggtitle("plot 4")


横着拼就"|"或"+",竖着拼就"/"
p1+p4  
p1|p4
两者效果一样,而且各占50%的空间比例。
p1/p4
这是竖着的效果,也是上下各占50%。
当拼多张图时,默认环境下,patchwork拼图出现的是正方形,按行分列。
p1+p2+p3+p4
3.png 以上的排版,可以通过背面跟plot_layout函数来举行调解。
plot_layout(ncol = NULL, nrow = NULL,byrow = NULL,widths = NULL,heights = NULL,
guides = NULL, tag_level = NULL,design = NULL)
参数的寄义:
ncol, nrow:设定多少行,多少列,和
byrow:默认是按行依次分列,设置FALSE就会按列依次分列
widths, heights:每行,每列的相对宽度和高度
design:手动指定布局中的位置信息
tag_levels : 用来添加标签,比方:'a', 'A', '1', 'i, or 'I'
p1+p2+p3+p4+plot_layout(ncol=3)  #指定了3列,然后按行依次分列
乃至,还可以通过括号,作为一个团体来对待。
p1|(p2|p3)
好比这个就是p2 p3作为一个团体占了50%的空间。在这个空间内,他们又是程度排版的。
p4/(p2|p3)
这个就是别的一个排版的例子,p2和p3作为一个团体和p4上下排版。然后p2和p3内部左右排版。
p4/(p1|(p2/p3))
这就是相对来说,更复杂的例子。p1|(p2/p3)作为一个团体和p4上下排版。在下半地区内p1占了50% p2和p3共占剩下的50%,而且p2和p3上下排版。
也可以自我计划布局格式,通报给design参数。
design <- "
AAA
BBC
DDD
"
通过design,我们计划了3行,第一行是一个量,第二行是2个量,第三行一个量
p1+p2+p3+p4+plot_layout(design=design)
8.png 下面我们看下widths和heights的控制。
p1+p2+plot_layout(widths=c(2,1))
可以看出通过c(2,1)相当于把空间按宽度分成了3份,第一个图占了2份既2/3。
p1+p2+p3+plot_layout(widths=c(3,2,1))
这个就是分成了3份,分别占比3/6, 2/6, 1/6。heights用法和widths类似。
10.png p4/(p1|(p2/p3))+plot_layout(heights=c(1,2))
和前面类似。p4占据上区间1/3。p1|(p2/p3)占据下区间2/3。
11.png 我们还可以变得更复杂点。
p4/((p1|(p2/p3))+plot_layout(widths=c(1,2)))+plot_layout(heights=c(1,2))
第一个widths用来控制p1 和p2/p3的占比布局。
plot_annotation 用来设置总图的title
(p1 | (p2 / p3)) + plot_annotation(
  title = 'The surprising truth about mtcars',
  subtitle = 'These 3 plots will reveal yet-untold secrets about our beloved data-set',
  caption = 'Disclaimer: None of these plots are insightful')
13.png tag_levels用来添加每个子图的标签。
(p1 | (p2 / p3)) +
 plot_annotation(tag_levels = 'A')
# tag_levels : 'a', 'A', '1', 'i, or 'I'
14.png 固然还可以添加标签的前缀和后缀:
# tag标签加前缀
((p1 | p2) / p3) +plot_annotation(tag_levels = 'A', tag_prefix = 'Fig. ')
# tag标签加后缀
((p1 | p2) / p3) +plot_annotation(tag_levels = 'A', tag_suffix = ':')


同时,patchwork也支持和别的图的拼图。
p1 + ~plot(mtcars$mpg, mtcars$disp, main = 'Plot 2')
15.png p1+grid::textGrob("some test text!")
文本拼图。


在拼图中,末了一个图是active的,以是还可以参加ggplot的恣意图层。
test <- p1| p2 / p3
test & theme(axis.text=element_text(size=15))
我们通过&就可以同一修改图中的参数了。
17.png
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-27 12:00, Processed in 0.285647 second(s), 47 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表