Load packages

library(UpSetR)
library(tidyr)
library(dplyr)
library(reshape)
library(pheatmap)

STEP 1 Load DEGs list from DESeq2

sample.list <- read.table("/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/Accession.list", sep ="\t", header = F)
colnames(sample.list )[1] <- "Name"

sample.list
#Load all down-regulated genes for each accession
for (i in 1:nrow(sample.list)){
  sample.df <- read.table(paste0("/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/0_data/",sample.list[i,1], "_data.tsv.log2FC-down.gene.list"), header = T, sep = " ")
  colnames(sample.df)[1] <- "Name"
  colnames(sample.df)[2] <- "Log2FC"
  assign(paste0(sample.list[i,1],"_down"), sample.df)
}

#Load all up-regulated genes for each accession
for (i in 1:nrow(sample.list)){
  sample.df <- read.table(paste0("/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/0_data/",sample.list[i,1], "_data.tsv.log2FC-up.gene.list"), header = T, sep = " ")
  colnames(sample.df)[1] <- "Name"
  colnames(sample.df)[2] <- "Log2FC"
  assign(paste0(sample.list[i,1],"_up"), sample.df)
}

head(sample.df, 30)

STEP 2 Load non-duplicted gene list across accesssions

Up.list <- read.table("/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/combine_nonduplicated_up.csv", header = F)
Down.list <- read.table("/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/combine_nonduplicated_down.csv", header = F)

colnames(Up.list)[1] <- "Name"
colnames(Down.list)[1] <- "Name"

head(Up.list, 20)
head(Down.list, 20) 

STEP 3 join each list genes for Down-regualted genes with master table

#for down-regulated DEGs
for (i in 1:nrow(sample.list)){
  synteny.df <- left_join(Down.list,get(paste0(sample.list[i,1], "_down")),by = "Name")
  synteny.df <- as.data.frame(synteny.df[,2])
  colnames(synteny.df) <- sample.list[i,1]
  assign(paste0("sub_DEGs_down_",sample.list[i,1]),synteny.df)
}

#Combined all dfs
merge_list1 <- lapply(ls(pattern = "sub_DEGs_down"), get)
down_combine <- bind_cols(merge_list1)

#Replace NA into 0
down_combine[is.na(down_combine)] <- 0
down_combine <- cbind(Down.list,down_combine)
colnames(down_combine)[1] <- "Name"
down_combine_upset <- down_combine

#Replace all values not equal with 1
for (i in 2:ncol(down_combine)){
down_combine_upset[,i] <-  replace(x = down_combine_upset[,i], 
                   down_combine_upset[,i] != 0.000000   , 
                   values =  1)
}

head(down_combine, 50)
head(down_combine_upset, 50)
write.csv(down_combine_upset, "/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/down_meta_upset.csv", row.names = F)
write.csv(down_combine, "/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/down_meta.csv", row.names = F)

STEP 3 join each list genes for Up-regualted genes with master table

#for up-regulated DEGs
for (i in 1:nrow(sample.list)){
  synteny.df <- left_join(Up.list,get(paste0(sample.list[i,1], "_up")),by = "Name")
  synteny.df <- as.data.frame(synteny.df[,2])
  colnames(synteny.df) <- sample.list[i,1]
  assign(paste0("sub_DEGs_up_",sample.list[i,1]),synteny.df)
}
#Combined all dfs
merge_list2 <- lapply(ls(pattern = "sub_DEGs_up"), get)
up_combine <- bind_cols(merge_list2)

#Replace NA into 0
up_combine[is.na(up_combine)] <- 0
up_combine <- cbind(Up.list,up_combine)
colnames(up_combine)[1] <- "Name"
up_combine_upset <- up_combine

#Replace all values not equal with 1
for (i in 2:ncol(up_combine)){
up_combine_upset[,i] <-  replace(x = up_combine_upset[,i], 
                   up_combine_upset[,i] != 0.000000 , 
                   values =  1)
}

### View header of the table 
head(up_combine, 50)
head(up_combine_upset, 50)
write.csv(up_combine_upset, "/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/up_meta_upset.csv", row.names = F)
write.csv(up_combine, "/Users/Leon/OneDrive - Cornell University/Projects/6_Cotton/7_Upset_plot/up_logFC.csv", row.names = F)

STEP 4 Create Pheatmap for up-down regulated genes from stress and control condition

#For up-regualted genes
rownames(up_combine)=up_combine$Name
up_combine_ph <- up_combine[,-1]

#Plot heatMap
pheatmap(up_combine_ph,
         cluster_rows = F, labels_row = NULL, annotation_names_row = F)

#################################################################################################################

#For down-regualted genes
rownames(down_combine)=down_combine$Name
down_combine_ph <- down_combine[,-1]

#Plot heatMap
pheatmap(down_combine_ph,
         cluster_rows = F, labels_row = NULL, annotation_names_row = F)

Create the upset plot

#Specifiy orders based on kinship
Kinship <- c("VIR_7153_D_10",
"TIPO_CHACO_UA_4_4",
"AC_134_CB_4029",
"CB_4012_KING_KARAJAZSY",
"TAM_91C_34",
"VIR_7065_ALLEN_333",
"PLAINS",
"DP_493",
"LOCKETT_BXL",
"VIR_6615_MCU_5",
"WESTERN_STORMPROOF",
"RN96625_1",
"PD_3",
"VIR_7223",
"FUNTUA_FT_5",
"VIR_7094_COKER_310",
"COKER_310",
"TAM_86III_26",
"DP_393",
"TAM_94WE_37S",
"FM_958"
)


upset(up_combine_upset, 
      nsets = 23, 
      order.by = c("freq","degree"), 
      decreasing = c(F,F), 
      sets = Kinship,
      mb.ratio = c(0.5, 0.5),
      number.angles = 0, 
      text.scale = 1.1, 
      point.size = 2.8, 
      line.size = 1,
      matrix.color = "steelblue",
      sets.bar.color = "tomato"
)

upset(down_combine_upset, 
      nintersects = 200,
      nsets = 23, 
      order.by = c("freq", "degree"), 
      decreasing = c(TRUE,FALSE),
      sets = Kinship,
      keep.order = T,
      mb.ratio = c(0.5, 0.5),
      number.angles = 0, 
      text.scale = 1.1, 
      point.size = 1, 
      line.size = 0.6,
      matrix.color = "steelblue",
      sets.bar.color = "tomato"
)

upset(down_combine_upset, 
      nintersects = 200,
      nsets = 23, 
      order.by = c("freq", "degree"), 
      decreasing = c(FALSE,TRUE),
      sets = Kinship,
      keep.order = T,
      mb.ratio = c(0.5, 0.5),
      number.angles = 0, 
      text.scale = 1.1, 
      point.size = 1, 
      line.size = 0.6,
      matrix.color = "steelblue",
      sets.bar.color = "tomato"
)