如何为map()创建的各ggplot图表添加对应数据框名称的标题?
最简实现方法
这里有个超清爽的解决方案,用purrr包的imap()函数就能一步到位——它的设计就是同时遍历列表元素和它们的名称,刚好匹配你需要给每个图表加对应气缸数标题的需求。
完整代码
library(tidyverse) # 拆分数据集(可以简化成这样) mtcars_split <- mtcars %>% split(.$cyl) # 生成带对应标题的散点图 plots <- mtcars_split %>% imap(~ ggplot(data = .x, aes(y = mpg, x = wt)) + geom_jitter() + ggtitle(paste("Cylinder Count:", .y)) # .y就是每个子数据框的名称(4/6/8) )
关键说明
imap()里的.x指代列表中的每个子数据框(比如cyl=4的mtcars子集),.y则自动对应子数据框的名称也就是气缸数;- 如果你只想要纯数字的标题,直接用
ggtitle(.y)就行,不用paste(); - 要是你更习惯用
map2(),也能实现,只是需要手动传入列表名称:
plots <- map2(mtcars_split, names(mtcars_split), ~ ggplot(data = .x, aes(y = mpg, x = wt)) + geom_jitter() + ggtitle(paste("Cylinder Count:", .y)) )
但imap()显然是更简洁的选择,少写一行代码还更直观~
内容的提问来源于stack exchange,提问作者jimbo
相关产品推荐
相关产品推荐

