ggplot2如何为每条geom_line添加数据标注和点位并优化显示效果
实现方案
你可以按照以下步骤修改代码,同时添加死亡数标注并优化排版:
- 先修复原代码中x轴变量名不一致的问题,全局使用数据集中的
EPI_WEEK作为x轴变量 - 新增死亡线对应的标注层,注意标注的y坐标需要和死亡线的坐标匹配,即乘以缩放系数
scl,标注内容直接使用原始DEATHS数值即可 - 错开两类标注的位置,病例标注放在线条上方,死亡标注放在线条下方,避免重叠
- 适当调大y轴上限,预留标注显示空间,避免标注被边界截断
- 可选使用
geom_label替代geom_text,增加白色背景提升标注可读性,同时让标注颜色和对应线条颜色一致,视觉区分更清晰
修改后的完整代码如下:
scl = 10 ggplot(data = casos_obitos, aes(x = EPI_WEEK, group =1))+ # 调整y轴上限,预留足够的标签显示空间 scale_y_continuous(limits = c(0, max(c(casos_obitos$CASES, casos_obitos$DEATHS*scl)) + 100), expand = expansion(mult = c(0, .1)), sec.axis = sec_axis(~./scl, name = "Nº de Óbitos"))+ geom_line(aes(y = CASES, color = "CASES"), size = 1)+ geom_line(aes(y = DEATHS*scl, color = "DEATHS"), size = 1) + # 病例数标注:放在蓝色线上方,颜色和线条一致 geom_label(aes(y = CASES, label= CASES), hjust= 0.5, vjust = -0.8, size= 2.0, color= "blue", fill = "white", label.size = NA, check_overlap = TRUE) + # 死亡数标注:放在红色线下方,颜色和线条一致 geom_label(aes(y = DEATHS*scl, label= DEATHS), hjust= 0.5, vjust = 1.2, size= 2.0, color= "red", fill = "white", label.size = NA, check_overlap = TRUE) + labs(x = "Semana Epidemiológica", y = "Nº de Casos") + scale_colour_manual(" ", values=c("CASES" = "blue", "DEATHS" = "red"))+ theme_minimal(base_size = 10) + theme(legend.position = "bottom", axis.line = element_line(colour = "black"), axis.text.x=element_text(angle = 90, vjust = 0.5, hjust=1, color="black"), axis.text.y=element_text(color="black"))
补充说明
check_overlap = TRUE参数会自动隐藏重叠的标注,适合数据点密集的场景- 你可以根据实际显示效果微调
vjust的数值,调整标注和线条的距离 - 如果不需要白色背景,把
geom_label换回geom_text、去掉fill和label.size参数即可
内容的提问来源于stack exchange,提问作者user15159175
相关产品推荐
相关产品推荐

