如何在ggplot分面图中添加MRJ虚线且不生成MRJ分面?
解决方案
数据与预处理代码
cmf <- data.frame( apresid = c("1.0", "2.1", "2.2", "3.1", "3.2", "3.3", "4.0", "5.1", "5.2", "5.3", "MRJ"), cmf12 = c(10.7, 7.1, 5.4, 11.3, 10.0, 9.3, 8.9, 10.7, 8.8, 11.4, 10.0), cmf13 = c(8.8, 4.9, 7.9, 10.3, 10.7, 9.3, 6.9, 10.4, 8.5, 8.5, 9.3), cmf14 = c(10.2, 4.4, 4.1, 10.3, 9.0, 9.7, 7.9, 11.6, 9.3, 10.1, 9.5), cmf15 = c(11.0, 6.1, 6.7, 8.7, 9.0, 11.2, 9.1, 9.2, 8.9, 12.8, 9.2), cmf16 = c(7.4, 6.2, 6.6, 9.4, 9.1, 8.9, 9.8, 10.8, 6.5, 8.6, 8.7), cmf17 = c(10.7, 7.2, 7.0, 9.2, 7.1, 11.5, 8.9, 10.6, 8.8, 7.3, 9.0), cmf18 = c(11.6, 5.8, 7.3, 10.1, 7.9, 12.4, 8.8, 11.2, 9.7, 8.9, 9.3), cmf19 = c(10.6, 8.9, 11.0, 11.5, 8.5, 10.4, 7.7, 12.5, 10.3, 13.8, 10.9), cmf20 = c(13.7, 8.2, 7.3, 12.7, 10.6, 10.6, 7.4, 11.2, 12.0, 12.7, 10.4), cmf21 = c(11.7, 8.7, 7.3, 11.7, 9.1, 10.0, 8.4, 11.2, 12.8, 13.5, 10.1), cmf22 = c(10.7, 4.0, 9.1, 10.0, 11.9, 10.0, 8.4, 10.3, 9.8, 9.7, 8.4), cmf23 = c(9.6, 7.0, 7.0, 9.8, 8.9, 7.9, 6.5, 10.3, 9.8, 9.8, 8.9), cmf24 = c(6.5, 4.3, 6.5, 8.7, 9.0, 9.4, 10.2, 8.0, 7.8, 9.2, 8.9), cmf25 = c(7.4, 10.6, 15.4, 14.7, 10.6, 10.6, 5.4, 8.0, 7.9, 8.7, 8.6) ) cmf_long <- cmf %>% pivot_longer(cols = starts_with("cmf"), names_to = "ano", values_to = "cmf") %>% mutate(ano = as.numeric(gsub("cmf", "", ano)) + 2000) %>% mutate(ano = as.character(ano))
修改后的绘图代码
# 拆分主数据(排除MRJ)和参考线数据(仅MRJ) main_data <- cmf_long %>% filter(apresid != "MRJ") mrj_data <- cmf_long %>% filter(apresid == "MRJ") ggplot(main_data, aes(x = ano, y = cmf, group = apresid)) + geom_line(color = "red", size = 2) + # MRJ数据无分面变量关联,会自动在所有分面渲染 geom_line(data = mrj_data, aes(x = ano, y = cmf), linetype = "dashed", color = "black", size = 1) + facet_wrap(~apresid, scales = "fixed", ncol = 5) + ylim(0, 20) + labs(y = "胎儿死亡率系数/1000活产", x = NULL) + theme_minimal(base_size = 20) + theme( strip.background = element_rect(fill = "darkred"), strip.text = element_text(color = "white", face = "bold"), axis.text.x = element_text(angle = 45, hjust = 1), panel.grid.major = element_line(color = "gray", linetype = "dashed", size = 0.5) )
修改说明
- 主数据过滤掉
MRJ条目,确保分面仅生成其他apresid的图表 - 单独提取
MRJ数据作为参考线图层,由于该数据不绑定分面变量,ggplot会自动在所有分面中渲染这条黑色虚线,完全匹配需求
内容的提问来源于stack exchange,提问作者Lana Meijinhos
相关产品推荐
相关产品推荐

