如何在Alluvial图中实现自定义标签的垂直居中对齐?
解决Alluvial图标签垂直居中的问题
你的问题出在使用了position = "stack"来放置标签,这个参数是基于y值的堆叠累加定位,无法自动对齐到每个stratum区块的中心。要实现标签垂直居中,最简单的方式是使用ggalluvial包专门提供的position_stratum()位置调整函数,它会自动计算每个stratum的中心位置。
修改后的代码:
library(ggplot2) library(ggalluvial) data = structure(list(val = c(10, 30, 15, 30, 40, 12, 10, 30, 15), name = c("A", "B", "C", "A", "B", "C", "A", "B", "C"), group = c("gr1", "gr1", "gr1", "gr2", "gr2", "gr2", "gr3", "gr3", "gr3")), row.names = c(NA, -9L), class = "data.frame") data['val1'] = c('45', '23', '44', '55', '34', '55', '12', '34', '89') ggplot(data, aes(x = group, stratum = name, alluvium = name, y = val, fill = name, label = val)) + scale_x_discrete(expand = c(.1, .1)) + geom_flow(aes(fill = name), alpha = .3, width = 1/9) + geom_stratum(aes(color = name), alpha = .9, width = 1/9) + # 关键改动:用position_stratum()替代position = "stack" geom_text(aes(label = val1), position = position_stratum())
关键说明:
position_stratum()是ggalluvial为alluvial图的stratum区块量身设计的位置函数,会自动计算每个区块的垂直中心坐标,无需手动指定y值位置。- 移除了原代码中
geom_text里的y = val参数,因为position_stratum()会基于全局映射的y = val自动处理位置,避免重复设置导致定位偏差。
修改后,标签会准确垂直居中显示在每个stratum区块的中心位置。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

