如何去除ggplot2冲积图中geom_text的重复标签?
问题
我正在制作冲积图(alluvial plot),希望为图的节点部分标注百分比。使用geom_text函数时出现了重复标签:一个位置符合预期,另一个则偏移到图像最右侧。如何移除这个右侧的重复标签?
我的代码如下:
ggplot(data = survey_3, aes(axis1 = leave, axis2 = stringr::str_wrap(Q58,40), y = freq)) + # 横轴1为离职意向,横轴2为反馈内容,纵轴为频次 geom_alluvium(aes(fill = Q58)) + # 冲积条填充色对应反馈内容 geom_stratum() + scale_x_discrete(limits=c("leave", "Q58"), expand=c(0.1, 0.1))+ # 调整横轴间距优化显示 geom_text(stat = "stratum", aes(label = after_stat(stratum)), fontface="bold") + geom_flow()+ geom_text(stat="flow", aes(label=percent), nudge_x = 0.5, fontface="bold", size=5)+ theme_void()+ guides(fill=guide_legend(title=""))+# 移除图例标题 ggtitle("未来1年内计划离职护士的后续规划" )+ theme(plot.title=element_text(hjust=0.5, face="bold", size=15), legend.position = "none")# 标题居中加粗,隐藏图例
数据集:
survey_3<-data.frame(leave=c("计划6个月至1年内离职", "计划6个月至1年内离职", "计划6个月至1年内离职", "计划6个月至1年内离职", "计划6个月至1年内离职"), Q58=c("计划继续深造", "计划转非护理岗位", "计划在本院转其他护理岗位", "计划退休/停止工作", "计划转至其他机构的护理岗位"), freq=c(139, 299, 307, 514, 957), percent=c("1.97%", "4.24%", "4.35%", "7.28%", "13.56%"))
解决方案
重复标签的根源是stat="flow"会为每条冲积流生成两个端点数据(分别对应x轴的两个位置:leave和Q58),默认会在两个位置都渲染标签,导致右侧出现多余的重复项。
只需要在geom_text(stat="flow")中添加过滤条件,只保留第二个横轴(x=2)对应的标签即可:
修改后的关键代码行:
geom_text(stat="flow", aes(label=percent), nudge_x = 0.5, fontface="bold", size=5, filter = after_stat(x == 2))
完整修改后的代码:
ggplot(data = survey_3, aes(axis1 = leave, axis2 = stringr::str_wrap(Q58,40), y = freq)) + geom_alluvium(aes(fill = Q58)) + geom_stratum() + scale_x_discrete(limits=c("leave", "Q58"), expand=c(0.1, 0.1))+ geom_text(stat = "stratum", aes(label = after_stat(stratum)), fontface="bold") + geom_flow()+ # 添加filter条件过滤多余标签 geom_text(stat="flow", aes(label=percent), nudge_x = 0.5, fontface="bold", size=5, filter = after_stat(x == 2))+ theme_void()+ guides(fill=guide_legend(title=""))+ ggtitle("未来1年内计划离职护士的后续规划" )+ theme(plot.title=element_text(hjust=0.5, face="bold", size=15), legend.position = "none")
这样就能只保留符合预期位置的百分比标签,移除右侧的重复标签。
内容的提问来源于stack exchange,提问作者EtoiledeMoyenOrient
相关产品推荐
相关产品推荐

