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

R语言ggsankey桑基图自定义右侧节点排序不生效问题求助

问题原因

设置因子层级未生效有两个核心问题:

  1. 注释的层级设置代码调用了不存在的records_sankey数据集,实际绘图使用的是test数据集,赋值对象和数据源不匹配
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:48:03