桑基图绘制(sankey diagram)

R常用的方法有:
ggalluvial
sankeyNetwork

主要是文件准备比较麻烦,代码如下

sankey_make<-function(exp_deg_dir,trans_deg_dir,prefix,FC,p_value){
suppressMessages(library(tidyverse))

exp_deg<-read.csv(exp_deg_dir)
exp_deg$"Gene_id"<-unlist(lapply(as.character(exp_deg[,1]), FUN = function(x) {return(strsplit(x, split = ".",fixed = T)[[1]][1])}))

trans_deg<-read.csv(trans_deg_dir)
trans_deg$"Gene_id"<-unlist(lapply(as.character(trans_deg[,1]), FUN = function(x) {return(strsplit(x, split = "_",fixed = T)[[1]][2])}))
trans_deg$"Gene_id"<-unlist(lapply(as.character(trans_deg[,"Gene_id"]), FUN = function(x) {return(strsplit(x, split = ".",fixed = T)[[1]][1])}))

total_list=intersect(exp_deg$Gene_id,trans_deg$Gene_id)
#gene expression 
exp_deg_sig_up<-exp_deg %>% filter(pvalueFC)
exp_deg_sig_up_list<-as.character(exp_deg_sig_up$Gene_id)
exp_deg_sig_up_list<-intersect(exp_deg_sig_up_list,total_list)

exp_deg_sig_down<-exp_deg %>% filter(pvalue% filter(pvalueFC)
trans_deg_sig_up_list<-as.character(trans_deg_sig_up$Gene_id)
trans_deg_sig_up_list<-get_list(a=total_list,b=trans_deg_sig_up_list)


trans_deg_sig_down<-trans_deg %>% filter(pvalue% filter(pvalue>p_value | abs(log2FoldChange)% unique())
snakey_df$IDsource=match(snakey_df$source, nodes$name)-1 
snakey_df$IDtarget=match(snakey_df$target, nodes$name)-1

sankeyNetwork(Links = snakey_df, Nodes = nodes,
              Source = "IDsource", Target = "IDtarget",
              Value = "value", NodeID = "name",
              sinksRight=F,nodeWidth=20, fontSize=14, nodePadding=20,
              LinkGroup = 'Species')

准备文件2

cat_number<-function(a,b){length(b[is.element(b,a)])}
tissues<-as.character(unique(data$fed_tissues))

out_tab<-data.frame()
for (i in tissues){
  source=paste0(i,"_Fed")
  fed_rt=data %>% filter(fed_tissues==i)
  fed_rt_gene_list<-as.character(fed_rt$gene_id)
  for (j in tissues){
  target= paste0(j,"_Fasting")
  fasting_rt<-data %>% filter(fasting_tissues==j)
  fasting_rt_gene_list<-as.character(fasting_rt$gene_id)
  value<-cat_number(a=fed_rt_gene_list,b=fasting_rt_gene_list)
  out_tab<-rbind(out_tab,cbind(source,target,value))
  }
}
out_tab<-out_tab[out_tab$value!=0,]

tatal_out_tab<-data.frame()
source<-"Total_Genes"
for (j in tissues){
  target= paste0(j,"_Fed")
  fed_rt<-data %>% filter(fed_tissues==j)
  fed_rt_gene_list<-as.character(fed_rt$gene_id)
  value<-cat_number(a=fed_rt_gene_list,b=fed_rt_gene_list)
  tatal_out_tab<-rbind(tatal_out_tab,cbind(source,target,value))
}

rt<-rbind(tatal_out_tab,out_tab)

图形格式
数据格式

你可能感兴趣的:(桑基图绘制(sankey diagram))