安裝所需要的R包
BiocManager::install("patchwork")
BiocManager::install("cowplot")
加載所需的R包嚷那,并將默認主題設置為theme_bw()妓柜,并將圖例放在圖的頂部
library(ggplot2)
library(cowplot)
library(patchwork)
theme_set(
theme_bw() +
theme(legend.position = "top")
)
創(chuàng)建一些基本圖像:
library("ggplot2")
my3cols <- c("#E7B800", "#2E9FDF", "#FC4E07")
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x = dose, y = len))
bxp <- p + geom_boxplot(aes(color = dose)) +
scale_color_manual(values = my3cols)
dp <- p + geom_dotplot(aes(color = dose, fill = dose),
binaxis='y', stackdir='center') +
scale_color_manual(values = my3cols) +
scale_fill_manual(values = my3cols)
lp <- ggplot(economics, aes(x = date, y = psavert)) +
geom_line(color = "#E46726")
dens <- ggplot(iris, aes(Sepal.Length)) +
geom_density(aes(color = Species)) +
scale_color_manual(values = my3cols)
patchwork包水平拼接
bxp + dens
bxp | dens
垂直布局
可以通過向plot_layout()來指定布局邢享,可以定義網(wǎng)格的尺寸以及要分配給不同行和列的空間
bxp + dens + plot_layout(ncol = 1)
指定每個圖的尺寸
bxp + dens + plot_layout(ncol = 1, heights = c(1, 3))
bxp + dens + plot_layout(ncol = 2, width = c(1, 2))
增加圖片之間的空間
bxp + plot_spacer() + dens
嵌套布局
您可以通過將部分圖用括號括起來來制作嵌套圖版面
lp + {
dens + {
bxp +
dp +
plot_layout(ncol = 1)
}
} +
plot_layout(ncol = 1)
高級功能
bxp + dp - lp + plot_layout(ncol = 1)
patchwork同時提供|和/分別用于水平和垂直布局
(bxp | lp | dp) / dens
可以使用&或 * 向所有子圖添加元素寻定,而不必單獨修改所有圖呛牲。兩者的不同之處 * 僅在于將影響當前嵌套級別上的圖:
(bxp + (dp + dens) + lp + plot_layout(ncol = 1)) * theme_gray()
而&將遞歸到嵌套級別:
(bxp + (dp + dens) + lp + plot_layout(ncol = 1)) & theme_gray()
添加標記
patchwork <- (bxp + (dp + dens) +
lp + plot_layout(ncol = 1)) & theme_gray()
patchwork + plot_annotation(tag_levels = 'A')
library("cowplot")
plot_grid(bxp, dp, dens ,
labels = c("A", "B", "C"),
ncol = 2, nrow = 2)
合并相同圖例(guides = 'collect')
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')
p1a <- ggplot(mtcars) +
geom_point(aes(mpg, disp, colour = mpg, size = wt)) +
ggtitle('Plot 1a')
p1a | (p2 / p3)
(p1a | (p2 / p3)) + plot_layout(guides = 'collect')