patchwork
是基于ggplot2
的拼圖包叁扫,因為ggplot2
本身沒有強大的拼圖語法烤低,而一般使用的gridExtra
與cowplot
的拼ggplot2
圖形都存在不少問題劲藐。
我關(guān)注這個包蠻久了镶柱,現(xiàn)在Github上的Star數(shù)已經(jīng)遠超大部分的R包摔癣,但似乎還沒有發(fā)布到CRAN。我的工作看似跟作圖相關(guān)襟交,寫的博文大多數(shù)也如此迈倍,但實際對圖形的掌控力并不咋的,所以還是要多多學習捣域。
下面進入正題啼染,掌握好ggplot2
與patchwork
的基本用法,一般的圖形都可以搞定了焕梅,并必要搞的很復雜迹鹅。解決問題是關(guān)鍵,認真工作也是關(guān)鍵贞言,畫圖看起來是斜棚,其實不是。
安裝
# 需要提取安裝好devtools包该窗,
# 如果你解決安裝和載入包很麻煩弟蚀,可以試試pacman包,我在簡書寫了介紹和簡單使用
devtools::install_github("thomasp85/patchwork")
導入:
p_load(patchwork)
# 或
# library(patchwork)
例子
patchwork
的使用灰常簡單酗失,使用+
把要拼的圖加在一起就可以了粗梭。
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + p2
我們不用創(chuàng)建對象,也可以像ggplot2
本身使用一樣相加级零。
ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear))
另外,可以使用布局函數(shù)plot_layout
對拼接細節(jié)進行更細致地指定滞乙,像每個圖的范圍奏纪,圖形的排列。
p1 + p2 + plot_layout(ncol = 1, heights = c(3, 1))
如果你想要在圖形之間添加一些空間斩启,可以使用plot_spacer()
填充一個空白格序调。
p1 + plot_spacer() + p2
增加花括號的使用進行嵌套可以布置更復雜的圖形:
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
p4 + {
p1 + {
p2 +
p3 +
plot_layout(ncol = 1)
}
} +
plot_layout(ncol = 1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
括號也是可以的:
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
p4 + (
p1 + (
p2 +
p3 +
plot_layout(ncol = 1)
)
) +
plot_layout(ncol = 1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
高級特性
除了將圖形添加到一起,patchwork
定義了一些有意思的操作符兔簇,发绢,簡化了上面的嵌套語法硬耍。-
操作符將左右兩邊的對象放在同一個嵌套層,而不是像+
號把右邊放入左邊的嵌套層边酒。
p1 + p2 + p3 + plot_layout(ncol = 1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
p1 + p2 - p3 + plot_layout(ncol = 1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
現(xiàn)在p1+p2
與p3
在同一嵌套層经柴。
|
與/
操作符可以用來水平和垂直布局。
(p1 | p2 | p3) /
p4
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
子圖多的時候同時修改圖形比較麻煩墩朦,patchwork
提供了*
與&
用來簡化代碼坯认,它們都可以將同一個操作應(yīng)用到所有圖形。
(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
需要注意*
只會應(yīng)用到當前嵌套層氓涣。
p1 + (p2 + p3) + p4 + plot_layout(ncol = 1) & theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
&
可以用遞歸的方式應(yīng)用到所有層面牛哺。