轴分类不同时,如何为桑基图(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
相关产品推荐
相关产品推荐

