R语言ggsankey桑基图自定义右侧节点排序不生效问题求助
问题原因
设置因子层级未生效有两个核心问题:
- 注释的层级设置代码调用了不存在的
records_sankey数据集,实际绘图使用的是test数据集,赋值对象和数据源不匹配 node列同时包含国家名称和赛事名称两类值,直接全列设置为赛事的因子层级,会导致国家名称的因子值变为NA,ggsankey识别不到有效层级就会默认按字母排序
解决方案
先定义你需要的赛事排序规则,再分别为node、next_node设置包含所有有效值的因子层级即可:
# 先定义赛事的自定义顺序 event_order <- c("Men 50m Freestyle","Men 100m Freestyle","Men 200m Freestyle","Men 400m Freestyle","Men 800m Freestyle","Men 1500m Freestyle") # 定义左侧国家的排序(可根据自身需求调整顺序) country_order <- c("CHN", "KOR", "JPN") # 为node列设置完整因子层级,先放国家再放赛事 test$node <- factor(test$node, levels = c(country_order, event_order)) # 为next_node列设置赛事因子层级 test$next_node <- factor(test$next_node, levels = event_order) # 后续绘图代码保持不变即可 f1 = "Fira Sans Compressed" test.plot <- ggplot(test, aes(x = x, next_x = next_x, node = node, next_node = next_node, fill = color, label = node)) + geom_sankey() + geom_sankey_text(aes(hjust = if_else(x == "Event", 1, 0)), family = f1, size = 3) + scale_fill_identity() + coord_cartesian(expand = FALSE, clip = "off") + labs( title = "Top 5 Asian Country's Entry (Since 1986)" ) + theme( legend.position = "none", axis.text = element_blank(), panel.grid = element_blank(), plot.title = element_text(hjust = 0.5, size = 23, family = f1, face = "bold"), plot.caption = element_text(hjust = 0.5) ) test.plot
如果需要调整左侧国家的上下顺序,只需要修改country_order里的国家排列顺序即可。
内容的提问来源于stack exchange,提问作者OMG C
相关产品推荐
相关产品推荐

