桑葚图,又称为桑基图(Sankey Diagram),是一种流图,通常用于显示流量的分布和流向。它能够直观地展示不同路径上的流量和转移关系,适用于能源、资金、物质、信息等各种流动过程的分析。
桑葚图的特点
流量宽度:流量线的宽度与流量的大小成正比,流量越大,线条越宽。 流向清晰:箭头或线条展示了从一个节点流向另一个节点的路径,方向明确。 节点分布:节点表示起点、终点或中间过程,节点之间通过流量线连接。
桑葚图的组成部分
节点(Nodes):表示流量的源头、汇集点或中间状态。 流量线(Flows/Links):连接节点的线条,表示流量的方向和大小。
桑葚图的应用
能源流动:显示能源从生产到消费的流动过程。 资金流动:展示企业或个人的资金来源和去向。 物料流动:展示生产过程中各物料的输入和输出。 信息流动:在信息系统中,展示信息从一个模块流向另一个模块的过程。
桑葚图的制作步骤
确定分析对象和范围:明确需要分析的流量种类及其流向。 收集数据:获取各节点之间的流量数据。 绘制节点:在图表中标出各节点的位置。 绘制流量线:根据流量大小,绘制连接节点的线条,并调整线条的宽度。
示例
# 加载必要的库
library(ggalluvial)
library(ggplot2)
library(dplyr)
# 读取数据
rt <- read.table("input.txt" , header = TRUE, sep = "\t", check.names = FALSE)
# 转换数据为lodes形式
corLodes <- to_lodes_form(rt, axes = 1:ncol(rt), id = "Cohort")
# 定义颜色
mycol <- rep(c("#029149","#6E568C","#E0367A","#D8D155","#223D6C","#D20A13","#431A3D","#91612D","#FFD121","#088247","#11AA4D","#58CDD9","#7A142C","#5D90BA","#64495D","#7CC767"), 15)
# 绘制桑葚图
pdf(file = "ggalluvial.pdf" , width = 7, height = 6)
ggplot(corLodes, aes(x = x, stratum = stratum, alluvium = Cohort, fill = stratum, label = stratum)) +
scale_x_discrete(expand = c(0, 0)) +
geom_flow(width = 0.2, aes.flow = "forward") +
geom_stratum(alpha = 0.9, width = 0.2) +
scale_fill_manual(values = mycol) +
geom_text(stat = "stratum", size = 2, color = "black") +
xlab("") +
ylab("") +
theme_bw() +
theme(
axis.line = element_blank(),
axis.ticks = element_blank(),
axis.text.y = element_blank(),
panel.grid = element_blank(),
panel.border = element_blank()
) +
ggtitle("") +
guides(fill = FALSE)
dev.off()
加载库:
ggalluvial
:用于创建桑葚图。ggplot2
:用于数据可视化。dplyr
:用于数据操作和清洗。
读取数据:
从指定文件 input.txt
中读取数据,假设文件是以制表符分隔的,并且包含表头。check.names = FALSE
保持列名原样,不进行自动更改。
转换数据格式:
使用 to_lodes_form
函数将数据转换为适用于桑葚图的格式。
定义颜色:
创建一个包含多种颜色的向量 mycol
,用于填充桑葚图中的不同区域。
绘制桑葚图:
使用 pdf
函数设置输出文件为 PDF 格式,并指定宽度和高度。使用 ggplot
函数绘制桑葚图,设置各个美学映射(aes),包括x
、stratum
、alluvium
、fill
和label
。使用 scale_x_discrete
移除 x 轴两端的空白。使用 geom_flow
绘制流动线条,width = 0.2
设置线条宽度,aes.flow = "forward"
表示颜色与前面的 stratum 一致。使用 geom_stratum
绘制层级,设置透明度和宽度。使用 scale_fill_manual
设置填充颜色。使用 geom_text
在 stratum 上添加标签,设置标签大小和颜色。移除 x 轴和 y 轴标签。 使用 theme_bw
设置黑白主题,并移除多余的图表元素(轴线、刻度、刻度文字、网格线和边框)。移除图表标题和图例。
桑葚图的优缺点
优点:
直观展示复杂的流动关系。 适用于多种领域的流量分析。 能够同时展示多个流量路径。
缺点:
数据复杂时,图表可能显得杂乱。 对于非专业用户,理解和制作可能有一定难度。
欢迎关注
往期回顾
点点“分享”,给我充点儿电吧~