如何在ggplot2的facet_grid中添加字母标签并保留原有分面标签
问题描述
我现有一张分面图表:
想给每个分面方块添加字母标签(如a)、b)这类),效果参考下图:
但希望保留原有的“50”“75”以及分钟类的分面标题标签,请问能不能实现?
我的代码如下:
Buoy <- joined_lists %>% filter(!is.na(buoyancy), !is.na(period), !is.na(air_force)) %>% mutate(hora = hour(date_time), average = factor(average, levels = c("30min", "5min", "1min"))) %>% group_by(hora, average, level, air_force) %>% summarise(buoyancy = mean(buoyancy, na.rm = TRUE)) %>% ggplot(aes(x = hora, y = buoyancy, color = factor(air_force))) + geom_line() + geom_point() + geom_hline(yintercept = 0) + facet_grid(average ~ level, scales = "fixed", shrink = TRUE)+ labs(y = expression(B(m^2/s^3)), x = "Time(h)", color = "Regime do vento")+ theme_bw(base_size = 16, base_family = "Helvetica")+ theme(strip.text = element_text(face = "bold", size = 16), legend.key = element_rect(color = "white"), axis.title.y = element_text(angle = 90, vjust = 0.5)) tag_facet(p = Buoy, x = -Inf, y = Inf, open = "", close = ")" , tag_pool = letters)
解决方案
完全可以实现,你用的tag_facet(一般来自ggpubr或lemon包)本身就是在分面内部添加标签,不会覆盖顶部/右侧的分面标题(也就是你说的“50”“75”和分钟类标签)。如果出现标签重叠或标题消失的情况,按下面的方法调整即可:
微调标签位置避免重叠
给tag_facet加上hjust和vjust参数,把字母标签往分面内部挪一点,别蹭到顶部的分面标题:tag_facet(p = Buoy, x = -Inf, y = Inf, hjust = -0.2, vjust = 1.2, # 可按需修改偏移量 open = "", close = ")", tag_pool = letters)手动添加标签(备选方案)
要是tag_facet不好用,也可以手动构造标签数据,用geom_text直接加:# 提取分面的分组组合,生成对应字母标签 facet_tags <- Buoy$data %>% distinct(average, level) %>% mutate(tag = paste0(letters[1:nrow(.)], ")")) # 在原图表上叠加标签 Buoy + geom_text(data = facet_tags, aes(x = -Inf, y = Inf, label = tag), hjust = -0.2, vjust = 1.2, inherit.aes = FALSE, # 不继承主图的aes设置 fontface = "bold", size = 5)确保分面标题可见
检查你的theme设置,别把分面标题或背景隐藏了:theme(strip.text = element_text(face = "bold", size = 16), strip.background = element_rect(fill = "white"), # 保证分面标题背景可见 # 其他theme设置... )
按上面的方法调整后,就能同时保留原有的分面标题,并且给每个分面加上字母标签,达到你想要的效果。
内容的提问来源于stack exchange,提问作者Alessandro Valle
相关产品推荐
相关产品推荐

