You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:20:29