三组(连续)桑基图绘制(含百分比)学习

桑基图(Sankey Diagram) 是一种用于可视化数据流的图表类型,常用于展示数据、能量、物料、资金或其他资源在系统中不同部分之间的流动和分配情况。桑基图通过宽度可变的流线(即流动线)来表示流动的大小,流线越宽,表示的流动量越大。它非常适合展示复杂的系统、过程或多个类别之间的关系。

桑基图的主要组成部分

  1. 节点(Nodes):代表系统中的不同部分或类别,例如部门、阶段或类别等。

  2. 流线(Flows):连接不同节点的线条,表示资源或数量从一个节点流向另一个节点。流线的宽度反映了流动的大小或数量。

  3. 层级(Axes):通常桑基图会分成多个层级,用于展示资源在不同节点之间的转移。

桑基图的优点

  1. 直观展示复杂关系:通过宽度可变的流线,可以非常直观地展示不同部分之间的数量关系和流动情况。

  2. 易于比较:各个流线的宽度能清晰地展示不同路径的相对大小,方便比较和分析。

制作桑基图的工具

  1. R语言:ggplot2、ggalluvial、ggsankey、networkD3等包都支持绘制桑基图。

  2. Python:可以使用Plotly、matplotlib、Holoviews等库。

  3. 在线工具:如Excel、Google Data Studio、Tableau等可视化工具也支持桑基图的制作。

所以笔者不认为一定要执着于R,这种图的绘制可以怎么快速怎么来~

步骤流程
1、导入数据
rm(list = ls())
library(ggplot2)
library(tidyverse)

load("./data.Rdata")
2、数据展示
df1 <- data
head(df1)
#                  gender lymph_neck_dissection alcohol
# TCGA-CR-7374-01A FEMALE                    NO     YES
# TCGA-CV-A45V-01A FEMALE                    NO      NO
# TCGA-CV-7102-01A FEMALE                   YES     YES
# TCGA-MT-A67D-01A   MALE                   YES     YES
# TCGA-P3-A6T4-01A   MALE                   YES     YES
# TCGA-CV-7255-01A FEMALE                    NO     YES
3、三组桑基图
colnames(df1)
conver_res <- to_lodes_form(df1,                        
                            axes = 1:ncol(df1),                       
                            key = "x",                       
                            value = "stratum",                       
                            id = "alluvium")

color <- c("#9079ad","#7ebea5","#d8a373","#f09199",
           "#8d6449","#4c6cb3","#fef263","#ce5242")
pdf(file="sankey_with.pdf", width=8, height=6)
ggplot(conver_res,        
       aes(x = x, stratum = stratum, alluvium = alluvium,
           fill = stratum, label = stratum)) +  
  scale_fill_manual(values = color) +  
  geom_flow(width = 0.4, aes.flow = "forward") + 
  geom_stratum(alpha = 0.8, width = 0.4) +  
  # 调整节点标签的位置
  geom_text(data = subset(conver_res, x != "status"), 
            stat = "stratum", size = 5, color = "black", family = "serif", 
            vjust = -1.5, hjust = 0.5) +  # 调整 vjust 和 hjust 使标签与条带对齐
  geom_text(data = subset(conver_res, x == "status"), 
            stat = "stratum", size = 5, color = "black", family = "serif", 
            vjust = -1.5, hjust = 0.5) +  # 适当调整位置
  # 调整百分比的位置,避免与标签重叠
  geom_text(aes(label = sprintf("%.1f%%", after_stat(prop) * 100)),
            stat = "stratum", size = 4.5, vjust = 1.5, hjust = 0.5, color = "black", 
            family = "serif", check_overlap = TRUE) +
  theme_classic() +  
  theme(axis.line = element_blank(), axis.ticks = element_blank(),
        axis.text.y = element_blank()) +   
  theme(panel.grid = element_blank()) +   
  theme(panel.border = element_blank()) +   
  theme(axis.text.x = element_text(size = 15, family = "serif", colour = "black")) + 
  xlab("") +  
  ylab("") +   
  ggtitle("") +   
  guides(fill = "none")
dev.off()

标签调整很关键! 百分比需要手动调整,其实蛮麻烦的。

调整标签的垂直对齐 (vjust) 和水平对齐 (hjust):

通过修改 vjust 可以控制标签和百分比的上下移动。

通过修改 hjust 可以控制标签和百分比的左右移动。

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -

你好!对于R语言多层桑基图绘制,你可以使用`ggalluvial`包来实现。这个包提供了一种直观的方式来展示微生物组分类学及丰度的信息。 首先,你需要安装`ggalluvial`包。可以使用以下代码安装: ```R install.packages("ggalluvial") ``` 安装完成后,你可以加载这个包: ```R library(ggalluvial) ``` 接下来,你需要准备绘制桑基图所需的数据。通常,你需要一个数据框,其中包了不同分类学级别的分类信息和相应的丰度值。 例如,假设你有以下示例数据: ```R data <- data.frame( Kingdom = c("Bacteria", "Bacteria", "Bacteria", "Archaea", "Archaea"), Phylum = c("Proteobacteria", "Firmicutes", "Actinobacteria", "Euryarchaeota", "Crenarchaeota"), Class = c("Alphaproteobacteria", "Clostridia", "Actinobacteria", "Methanobacteria", "Thermoprotei"), Abundance = c(0.4, 0.3, 0.1, 0.05, 0.15) ) ``` 接下来,你可以使用`ggplot`函数创建一个基础的绘图对象,并使用`geom_flow`函数来添加桑基图的流动路径: ```R ggplot(data, aes(axis1 = Kingdom, axis2 = Phylum, axis3 = Class, weight = Abundance)) + geom_flow() ``` 这将创建一个简单的桑基图,其中不同分类学级别之间的流动路径根据丰度值的权重进行调整。 你可以根据需要进一步自定义绘图,例如添加标签、调整颜色等。`ggalluvial`包提供了很多选项来自定义桑基图的外观和布局。 希望这个回答能帮到你!如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值