有时候我们需要在一个图形上叠加或添加另一个图形,ggplot2图形系统是R目前使用最广泛的图形系统,今天来学习一下怎么在ggplot2图形系统中叠加或嵌套其他图形。
主要介绍3个R包实现嵌套功能。
1. 绘制演示图形
绘制一个主图,绘制一个子图。
library(ggplot2)
library(patchwork)
mtcars$vs <- factor(mtcars$vs)
mtcars$gear <- factor(mtcars$gear)
# 主图
b <- ggplot(mtcars, aes(mpg, wt)) +
geom_point(size = 2) +
theme_bw(base_size = 10)
# 子图
c <- ggplot(mtcars, aes(mpg, disp, fill = gear)) +
geom_boxplot() +
theme_bw(base_size = 8) +
theme(legend.position = c(0.8, 0.6))
b + c
2. grid 包嵌套子图
创建视图窗口函数为grid 包的viewport()。
subvp <- viewport(width = 0.5, height = 0.5, x = 0.7, y = 0.6)
b
print(c, vp = subvp)
3. ggplot2 包嵌套子图
可以通过添加注释(annotate) 的方式,向一个图形内部添加一个小图形。
g <- ggplotGrob(c + theme(plot.background = element_rect(color = "white")))
b +
annotation_custom(grob = g,
xmin = 20, xmax = 32, ymin = 3, ymax = 5.2)
4. ggpp 包嵌套子图
library(ggpp)
p <- ggplot(data = mtcars, mapping = aes(wt, mpg)) +
geom_point()
df <- tibble(x = 0.01,
y = 0.01,
plot = list(p +
coord_cartesian(xlim = c(3, 4),
ylim = c(13, 16)) +
labs(x = NULL, y = NULL) +
theme_bw(10)))
p +
expand_limits(x = 0, y = 0) +
geom_plot_npc(data = df,
aes(npcx = x, npcy = y, label = plot))
以上3个R包都可以实现ggplot图形系统的子图嵌套功能。
本公众提供各种科研服务了!
一、课程培训 2022年以来,我们召集了一批富有经验的高校专业队伍,着手举行短期统计课程培训班,包括R语言、meta分析、临床预测模型、真实世界临床研究、问卷与量表分析、医学统计与SPSS、临床试验数据分析、重复测量资料分析、nhanes、孟德尔随机化等10门课。如果您有需求,不妨点击查看: 发表文章后退款!2023年郑老师团队多门科研统计直播课程,欢迎报名 二、统计服务 为团队发展,我们将与各位朋友合作共赢,本团队将开展统计分析服务,帮忙进行临床科研。欢迎了解详情: 医学统计服务| 医公共数据库论文一对一指导 |