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

轴分类不同时,如何为桑基图(Sankey Diagram)添加计数标签?

给桑基图节点标签添加计数的解决方案

步骤1:统计各分类计数并合并到数据中

先从原始数据里分别统计Before和After列各分类的数量,再将计数匹配到桑基图的节点数据中,同时区分节点属于前轴(x=1)还是后轴(x=2):

library(dplyr)
library(ggsankey)
library(ggplot2)

# 统计Before、After各分类的计数
before_counts <- data %>% count(Before) %>% rename(node = Before, count_before = n)
after_counts <- data %>% count(After) %>% rename(node = After, count_after = n)

# 生成桑基图格式数据,并合并计数、创建带计数的标签
transition_counts <- data %>% 
  make_long(Before, After) %>%
  left_join(before_counts, by = "node") %>%
  left_join(after_counts, by = "node") %>%
  mutate(
    # 根据节点所在轴选择对应计数
    node_count = ifelse(x == 1, count_before, count_after),
    # 构建「类别名 (计数)」格式的标签
    label_with_count = paste0(node, " (", node_count, ")")
  )

步骤2:修改绘图代码使用带计数的标签

把ggplot的label参数替换为新生成的label_with_count,即可让桑基图节点显示带计数的标签:

ggplot(
  transition_counts,
  aes(
    x = x, next_x = next_x, node = node,
    next_node = next_node, fill = factor(node),
    label = label_with_count
  )
) +
  geom_sankey(
    flow.alpha = .6,
    node.color = "gray30"
  ) +
  geom_sankey_label(
    aes(x = as.numeric(x) + .05),
    size = 4 / .pt, color = "white", fill = "gray40",
    hjust = 0
  ) +
  scale_fill_viridis_d() +
  theme_sankey(base_size = 4) +
  labs(x = NULL) +
  theme(legend.position = "none")

说明

  • 代码区分了前轴(x=1)和后轴(x=2)的计数,确保前轴节点显示Before列对应分类的数量,后轴节点显示After列对应分类的数量
  • 通过paste0拼接节点名称与计数,生成符合需求的标签文本

内容的提问来源于stack exchange,提问作者curious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:40