R语言echart

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

2022-11-18  本文已影响0人  jjjscuedu

其实前面在学习的时候也陆陆续续的用过一些拼图的包,像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

以上的排版,可以通过后面跟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)

下面我们看下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相同。

p4/(p1|(p2/p3))+plot_layout(heights=c(1,2))

和前面类似。p4占据上区间1/3。p1|(p2/p3)占据下区间2/3。

我们还可以变得更复杂点。

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')

tag_levels用来添加每个子图的标签。

(p1 | (p2 / p3)) +

 plot_annotation(tag_levels = 'A')

# tag_levels : 'a', 'A', '1', 'i, or 'I'

当然还可以添加标签的前缀和后缀:

# 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')

p1+grid::textGrob("some test text!")

文本拼图。

在拼图中,最后一个图是active的,所以还可以加入ggplot的任意图层。

test <- p1| p2 / p3

test & theme(axis.text=element_text(size=15))

我们通过&就可以统一修改图中的参数了。

上一篇下一篇

猜你喜欢

热点阅读