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)逐部分看输出:
cyl、vs、am、gear四列变成从左到右的四个阶段,每列是一个 stage。- 每个竖直小矩形是一个节点(node),高度对应该组内的观测数量。
- 连接两列的曲线是流动(flow),宽度正比于流过的观测数。
fill = factor(node)按节点着色,便于顺着一条色带追踪某组车在各阶段的去向。scale_fill_discrete(drop = FALSE)保证图例里不丢掉任何节点层级。
按场景选方案
要展示多对多的流量路径
用make_long()把宽表的列转成长表,再交给geom_sankey()。数据要求每行有x、next_x、node、next_node四个美学,最后阶段的next_node为NA;用make_long()生成时这些都会自动处理,实现见 R/sankey.R。
要强调连续流动的过程
把几何换成geom_alluvial:节点之间没有间距,色带从 y=0 往上堆叠,更像"一条河"。适合展示业务状态随环节连续迁移的过程,配色和标签写法与桑基图一致。
要对比各组的规模随时间变化
用geom_sankey_bump:x 轴是时间,除node外再给一个数值美学(比如 GDP),值大的组会"顶"到值小的组上方,位置和高度同时传达趋势。
让效果更好的细节
flow.alpha:流动曲线透明度,设为 0.6 可明显减轻交叉处的糊成一片。node.color/node.fill:单独控制节点边框与填充色,flow.*前缀参数则只管曲线。width与space:分别调节点宽度和节点间纵向间距。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),仅供参考