ggsankey:R 语言三步画出数据流可视化图的快速指南
2026/9/19 5:49:35 网站建设 项目流程

ggsankey:R 语言三步画出数据流可视化图的快速指南

【免费下载链接】ggsankeyMake sankey, alluvial and sankey bump plots in ggplot项目地址: https://gitcode.com/gh_mirrors/gg/ggsankey

想同时讲清"数据流向哪、流了多少",柱状图和饼图都无能为力。ggsankey 是一个 R 语言的 ggplot2 扩展包,用桑基图(Sankey diagram)做数据流可视化:节点宽度代表量,曲线宽度代表流量,十行代码就能画出第一张图。

🚀 先跑起来

装好包、准备一张"阶段 + 分组"的宽表,第一张桑基图就出来了。

# install.packages("devtools") devtools::install_git("https://gitcode.com/gh_mirrors/gg/ggsankey")

下面这段用了内置的mtcars数据:

library(ggsankey) library(dplyr) df <- mtcars %>% make_long(cyl, vs, am, gear) ggplot(df, aes(x = x, next_x = next_x, node = node, next_node = next_node, fill = factor(node))) + geom_sankey() + scale_fill_discrete(drop = FALSE)

逐部分看输出:

  • cylvsamgear四列变成从左到右的四个阶段,每列是一个 stage。
  • 每个竖直小矩形是一个节点(node),高度对应该组内的观测数量。
  • 连接两列的曲线是流动(flow),宽度正比于流过的观测数。
  • fill = factor(node)按节点着色,便于顺着一条色带追踪某组车在各阶段的去向。
  • scale_fill_discrete(drop = FALSE)保证图例里不丢掉任何节点层级。

按场景选方案

要展示多对多的流量路径

make_long()把宽表的列转成长表,再交给geom_sankey()。数据要求每行有xnext_xnodenext_node四个美学,最后阶段的next_nodeNA;用make_long()生成时这些都会自动处理,实现见 R/sankey.R。

要强调连续流动的过程

把几何换成geom_alluvial:节点之间没有间距,色带从 y=0 往上堆叠,更像"一条河"。适合展示业务状态随环节连续迁移的过程,配色和标签写法与桑基图一致。

要对比各组的规模随时间变化

geom_sankey_bump:x 轴是时间,除node外再给一个数值美学(比如 GDP),值大的组会"顶"到值小的组上方,位置和高度同时传达趋势。

让效果更好的细节

  • flow.alpha:流动曲线透明度,设为 0.6 可明显减轻交叉处的糊成一片。
  • node.color/node.fill:单独控制节点边框与填充色,flow.*前缀参数则只管曲线。
  • widthspace:分别调节点宽度和节点间纵向间距。
  • geom_sankey_label():把节点名放到节点正中,配合theme_sankey()得到极简风格。

容易踩的坑

  • 图例里少了几个节点:ggplot2 默认丢弃"未使用"的因子层级,加scale_fill_discrete(drop = FALSE)即可。
  • 最后一个阶段没有流动线流出:next_node在末阶段必须是NA,手工拼数据时漏掉这一步流动就会断头;交给make_long()生成最稳。
  • 直接用宽表绘图报错:geom_sankey只认长表格式,先make_long()再画图。

如果你日常用 ggplot2、又需要向别人解释数据在不同阶段之间的流量,ggsankey 能帮你把这类图做进任何报告。现在就拿一份手头的流向表(用户路径、预算分配都行),先用make_long()geom_sankey()画一张最小图,再按上面的参数逐步调。

【免费下载链接】ggsankeyMake sankey, alluvial and sankey bump plots in ggplot项目地址: https://gitcode.com/gh_mirrors/gg/ggsankey

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询