拼图包
目前常见的拼图包有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
网友评论