ggplot2中实现多个绘图在一张画布中组合
001、生成几个测试数据
library(ggplot2) library(dplyr) p1 <- ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + ggtitle("P1") ## 测试图p1 p2 <- ggplot(mpg) + geom_bar(aes(x = as.character(year), fill = drv), position = "dodge") + ggtitle("P2") ## 测试图p2 p3 <- ggplot(mpg) + geom_density(aes(x = hwy, fill = drv), colour = NA) + facet_grid(rows = vars(drv)) + ggtitle("P3") ## 测试图p3 p4 <- ggplot(mpg) + stat_summary(aes(x = drv, y = hwy, fill = drv), geom = "col", fun.data = mean_se) + stat_summary(aes(x = drv, y = hwy), geom = "errorbar", fun.data = mean_se, width = 0.5) + ggtitle("P4") ## 测试图p3
002、利用 patchwork 包进行图片组合
library(patchwork) ## 加载包
p1 + p2 ## p1 + p2组合

p1 + p4 ## p1 + p4组合

p4 + p1 ## p4 + p1组合

p1 + p2 + p3 ## p1 + p2 + p3 组合

p1 + p2 + p3 + p4 ## 四图组合

003、plot_layout(ncol = 1)选项控制列数
a、控制列数为1
p1 + p2 + p3 + plot_layout(ncol = 1) ## 列数为1

b、控制列数为2
p1 + p2 + p3 + plot_layout(ncol = 2) ## 控制列数为2

c、控制列数为3
p1 + p2 + p3 + plot_layout(ncol = 3) ## 控制列数为3

004、操作符\ 和 | 的使用
/表示垂直排列:
p1 / p2 ## 表示垂直排列

|表示水平排列:
p1 | p2 ## 水平排列

\和|组合使用:
p1 | p2/p3 ## 组合使用

\和|组合使用:
p1 / p2 | p4 ## 组合使用

\和|组合使用:
p1|(p2/(p3|p4)) ## 组合使用

005、复杂组合
layout <- " ## plot_layout设置复杂组合,1、2、3表示第几张图,#号表示空出 112 3#2 344 " p1 + p2 + p3 + p4 + plot_layout(design = layout) ## 绘图
绘图结果:

006、实现仅保留一个图例
p1 + p2 + p3 + plot_layout(ncol = 2, guides = "collect")##guides="collect"实现仅保留一个图例

007、将图例放在空余的地方
p1+p2+p3+guide_area()+plot_layout(ncol=2,guides="collect")## guide_area()函数实现

008、对子图进行修改
a、将p1和p2组合
p12 <- p1 + p2
p12

b、修改子图
p12[[2]] <- p12[[2]] + theme_light() ## 修改子图 p12

009、对所有子图进行修改
a、原图
p1 + p4 ## 直接组合

b、对所有子图进行修改
p1 + p4 & theme_light() ## 对所有子图进行修改

010、对所有子图进行修改,将y轴量程设为一致
a、直接组合
p1 + p4

b、同时对y轴的量程进行设置
p1 + p4 & scale_y_continuous(limits = c(0, 45)) ## 同时对组合图的y轴量程进行设置

011、增加注释
p34 <- p3 + p4 + plot_annotation( title = "A closer look at the effect of drive train in cars", #增加标题 caption = "Source: mpg dataset in ggplot2" #增加图片说明 ) p34

012、给图片添加编号
a、罗马数字编号
p123 <- p1 | (p2 / p3) ## 生成组合图 p123 + plot_annotation(tag_levels = "I") ## 使用罗马序号编号

b、小写字母编号
p123 <- p1 | (p2 / p3) ## 图片组合 p123 + plot_annotation(tag_levels = "a") ## 字母编号

c、大写字母编号
p123 <- p1 | (p2 / p3) p123 + plot_annotation(tag_levels = "A") ## 大写字母编号

来源:https://blog.csdn.net/weixin_45052363/article/details/124051895

浙公网安备 33010602011771号