数据流动的艺术:桑葚图全解析

学术   科学   2024-06-02 19:43   陕西  

桑葚图,又称为桑基图(Sankey Diagram),是一种流图,通常用于显示流量的分布和流向。它能够直观地展示不同路径上的流量和转移关系,适用于能源、资金、物质、信息等各种流动过程的分析。

桑葚图的特点

  1. 流量宽度:流量线的宽度与流量的大小成正比,流量越大,线条越宽。
  2. 流向清晰:箭头或线条展示了从一个节点流向另一个节点的路径,方向明确。
  3. 节点分布:节点表示起点、终点或中间过程,节点之间通过流量线连接。

桑葚图的组成部分

  1. 节点(Nodes):表示流量的源头、汇集点或中间状态。
  2. 流量线(Flows/Links):连接节点的线条,表示流量的方向和大小。

桑葚图的应用

  • 能源流动:显示能源从生产到消费的流动过程。
  • 资金流动:展示企业或个人的资金来源和去向。
  • 物料流动:展示生产过程中各物料的输入和输出。
  • 信息流动:在信息系统中,展示信息从一个模块流向另一个模块的过程。

桑葚图的制作步骤

  1. 确定分析对象和范围:明确需要分析的流量种类及其流向。
  2. 收集数据:获取各节点之间的流量数据。
  3. 绘制节点:在图表中标出各节点的位置。
  4. 绘制流量线:根据流量大小,绘制连接节点的线条,并调整线条的宽度。

示例

# 加载必要的库
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()

  1. 加载库

  • ggalluvial:用于创建桑葚图。
  • ggplot2:用于数据可视化。
  • dplyr:用于数据操作和清洗。
  • 读取数据

    • 从指定文件 input.txt 中读取数据,假设文件是以制表符分隔的,并且包含表头。check.names = FALSE 保持列名原样,不进行自动更改。
  • 转换数据格式

    • 使用 to_lodes_form 函数将数据转换为适用于桑葚图的格式。
  • 定义颜色

    • 创建一个包含多种颜色的向量 mycol,用于填充桑葚图中的不同区域。
  • 绘制桑葚图

    • 使用 pdf 函数设置输出文件为 PDF 格式,并指定宽度和高度。
    • 使用 ggplot 函数绘制桑葚图,设置各个美学映射(aes),包括 xstratumalluviumfilllabel
    • 使用 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 设置黑白主题,并移除多余的图表元素(轴线、刻度、刻度文字、网格线和边框)。
    • 移除图表标题和图例。

    桑葚图的优缺点

    优点

    • 直观展示复杂的流动关系。
    • 适用于多种领域的流量分析。
    • 能够同时展示多个流量路径。

    缺点

    • 数据复杂时,图表可能显得杂乱。
    • 对于非专业用户,理解和制作可能有一定难度。


    END

    欢迎关注






    往期回顾

    沉浸式翻译网页插件:一种全新的网页体验!

    探索Chatpaper:科研人员的智能文献助手

    ggtree:一款强大的R语言绘制生物进化树工具

    科研绘图模板之多组差异箱线图

    科研绘图模板之箱线分面图

    科研绘图模板之小提琴分面图

    探索Circos图:视觉化基因相关性的强大工具


    点点“分享”,给我充点儿电吧~

    Bioinfor 生信云
    分享生信小工具,以及各种测序分析专题,期待有志之士的加入!