拼圖包
目前常見的拼圖包有customLayout、cowplot、grid、gridExtra 。
patchwork的優點是使用簡單的語法(數學運算符號)將單獨的ggplots或plots、或者文字組合到同一圖形中。
library(patchwork)
library(ggplot2)
theme <- theme(plot.title = element_text(hjust = 0.5, color = "red"))
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(gear)) +
facet_wrap(~cyl) +
ggtitle('Plot 4')
同行添加
添加符(+)
按照加號的順序將圖片一一組合到一張畫布上,每一張圖片都調整為統一的高度和寬度。
p1+ (p2 + p3) + p3
group <- p2+p3
p1+ group + p3
結果是一樣的,組合符號 "+"識別到括號這一 結合符號了。
Rplot01.jpeg
添加ggplot2的各種參數
加號連接的最后一個圖是激活狀態,可以添加ggplot2的各種參數。
p1+ p2+ theme
Rplot03.jpeg
連接符(-)
添加符號(-)的作用與(+)的作用相似,但(-)將左邊的圖判斷為一個統一整體,在使用的時候,1/2均分左右的寬度。
p1- p2 - p3
Rplot02.jpeg
縱列添加(/)
p1 / p3 +
scale_color_gradient(low = "darkgreen", high = "lightgreen")
Rplot04.jpeg
添加其他組件
# 在右邊添加表格
p1 + gridExtra::tableGrob(mtcars[1:10, c('mpg', 'disp')])
# 添加plot
p1 + ~plot(mtcars$mpg, mtcars$disp, main = 'Plot 2')
ggplotify 可以將復雜的圖片進行格式調整,然后進行拼接。wrap_elements、wrap_ggplot_grob、wrap_plots 可以很容易的將非ggplot2的成分拼接在ggplot2圖片上。
*和&
為全部圖片添加element,*只為當前套嵌層添加,&為全局所有圖層添加。
group <- p1 + p2
p3 + group *theme
p3 + group & theme
Rplot05.jpeg
圖片注釋
添加字母上標,標題等。
plot_annotation(title = NULL, subtitle = NULL, caption = NULL,
tag_levels = NULL, tag_prefix = NULL, tag_suffix = NULL,
tag_sep = NULL, theme = NULL)
統一所有圖片的高度和寬度
multipage_align 、align_patches:
plots_aligned <- align_patches(p1, p2, p3, p4)
for (p in plots_aligned) {
plot(p)
}
創建y軸截斷的plot
require(ggplot2)
require(patchwork)
set.seed(13)
options(stringsAsFactors = FALSE)
name <- rep(LETTERS[1:10],3)
value <- runif(30)
data <- data.frame(name, value)
customer_theme <- theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title = element_blank(),
panel.background = element_blank(),
axis.line = element_line(colour = "black"))
p1 <- ggplot(data = data, aes(x = name, y = value)) +
geom_bar(stat = "identity", position = "stack") +
coord_cartesian(ylim = c(0,0.2)) #設置下面一半
p2 <- ggplot(data = data, aes(x = name, y = value)) +
geom_bar(stat = "identity", position = "stack") +
coord_cartesian(ylim = c(0.24,3)) +
scale_y_continuous(breaks = # 按值設置breaks
seq(from = 0.24, to = 3, by = 0.5)) +
labs( title = "Graph with broken y axis")
p2 /p1 & customer_theme
Graph with broken y axis.png