在生信文章中,我们经常会见到看起来很赛博朋克的桑基图——丰富色彩的虚实结合,高级感满满。如图1,一些ceRNA网络相关的文献就会用桑基图来直观的展示lncRNA、miRNA、mRNA的关系。
那么,如何在R中绘制桑基图呢?我们废话不多说,上代码。
首先,安装并加载所需的R包:
####使用ggplot2包与ggalluvial包绘制桑基图####
# 1.安装包----
install.packages("ggplot2")
install.packages("ggalluvial")
install.packages("dplyr")
# 2.加载包----
library(ggplot2)
library(ggalluvial)
library(dplyr)
然后,加载示例数据:
# 3.加载数据 (私信领取示例数据) ----
load("桑基图示例数据.rdata")
str(data)
我们先来看一下示例数据的结构,这是一个40行*3列的数据框。
每一行表示一个样本,第一列是样本所属亚组、第二列是样本风险评分高低、第三列是样本的生存状态。
接下来,需要对数据进行转换:
# 4.数据转换----
convertion <- to_lodes_form(data,
axes = 1:ncol(data),
key = "x",
value = "stratum",
id = "alluvium")
上面这几行代码同学们拿去用的时候,只要将代码中的data修改成你自己的数据的对象名即可。学有余力的同学可以仔细研究一下其中的参数。
最后,只需闭眼运行以下代码,就可以得到如图4的图形了:
# 5.绘制图形----
pdf(file="桑基图.pdf",width=8,height=6)
color <- c("#9079ad","#7ebea5","#d8a373","#f09199","#8d6449","#4c6cb3","#fef263","#ce5242")
ggplot(convertion,
aes(x = x, stratum = stratum, alluvium = alluvium,fill = stratum, label = stratum))+
scale_fill_manual(values = color)+
geom_flow(width = 0.4,aes.flow = "forward")+ #forward:线条颜色去前面的列保持一致,“backward”则与后面的列一致
geom_stratum(alpha =0.8,width = 0.4)+
geom_text(stat = "stratum", size = 5,color="black",family="serif")+
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()
今天的分析到这里就结束了。是不是很简单呢?快去试一试吧!