Switch to side-by-side view

--- a
+++ b/Fig6H_DLBCL_GSE98588_CGA_oncoprint.R
@@ -0,0 +1,200 @@
+
+# Plot oncoprint of DLBCL (GSE98588 Chapuy et al.) data CGA results (Figure 6H)
+
+library(ComplexHeatmap)
+library(circlize)
+library(RColorBrewer)
+library(grid)
+library(dplyr)
+library(readxl)
+
+
+# load data
+load("GSE98588_fm.Rdata")
+
+# read correlation results
+cor <- read.table("TableS6_GSE98588_DLBCL_antigen_correlations.tsv", sep = "\t", header = TRUE)
+cor_gcb <- read.table("TableS6_GSE98588_DLBCL_antigen_correlations_ABC.tsv", sep = "\t", header = TRUE)
+cor_abc <- read.table("TableS6_GSE98588_DLBCL_antigen_correlations_GCB.tsv", sep = "\t", header = TRUE)
+
+# remove case with testicular involvement
+fm <- fm[,!fm["B:CLIN:hodz_Testicular_invovlement",]%in%c(1)]
+
+# order samples by CGA number
+fm_cga_order <- fm[,order(as.numeric(fm["N:SAMP:nCGA",]), decreasing = FALSE)]
+
+# create matrix with selected alterations
+cor_noduplicates <- cor[grepl("nCGA", cor$featureA)&!grepl("DEL_LOSS|AMP_GAIN", cor$featureB),]
+
+gnab_top <- cor_noduplicates[order(cor_noduplicates$p),]
+gnab_top <- gnab_top[grepl("GNAB", gnab_top$featureB),]
+gnab_top <- gnab_top[gnab_top$FDR<0.1,]
+
+cnvr_top <- cor_noduplicates[order(cor_noduplicates$p),]
+cnvr_top <- cnvr_top[grepl("CNVR", cnvr_top$featureB),]
+cnvr_top <- cnvr_top[cnvr_top$FDR<0.05,]
+
+# combine cnv and mutations and edit feat to match fm
+feat_original <- rbind(cnvr_top, gnab_top) 
+
+feat <- feat_original %>%
+  mutate(featureB = gsub("AMP:GAIN", "AMP_GAIN", 
+                         gsub("_GAIN", ":GAIN",
+                              gsub("_LOSS", ":LOSS",
+                                   gsub("_AMP", ":AMP",
+                                        gsub("_DEL", "_DEL",
+                                             gsub("SV_BCL2", "BCL2:SV", featureB))))))) %>%
+  as.data.frame()
+
+mat <- fm_cga_order[as.character(feat[,"featureB"]),]
+
+# change codes for CNVs 
+# mat[grepl(":AMP|:GAIN", rownames(mat)),][mat[grepl(":AMP|:GAIN", rownames(mat)),]==1] <- "Amplification/gain"
+mat[grepl(":LOSS|:DEL", rownames(mat)),][mat[grepl(":LOSS|:DEL", rownames(mat)),]==1] <- "Deletion/loss"
+mat[grepl("GNAB", rownames(mat)),][mat[grepl("GNAB", rownames(mat)),]==1] <- "Nonsynonymous mutation" 
+
+# change row names
+rownames(mat) <- gsub("Q$", "q",
+                      gsub("([0-9])P$", "\\1p", 
+                           gsub("([0-9])_([0-9])", "\\1.\\2",
+                                gsub("_nonsynonymous|:AMP|:GAIN|:DEL|:LOSS|:LOSS_DEL|_GAIN|_DEL|_low_grade", "",
+                                     gsub(":::::", "",
+                                          gsub(".?:....:", "", 
+                                               gsub("SV:BCL2", "BCL2 (SV)", 
+                                                    gsub("([0-9])Q([0-9])", "\\1q\\2",
+                                                         gsub("([0-9])P([0-9])", "\\1p\\2", 
+                                                              rownames(mat))
+                                                    )
+                                               )
+                                          )
+                                     )))))
+
+mat <- as.matrix(mat)
+
+# create data frames for heatmap annotations
+coo <- as.character(fm_cga_order["B:SAMP:COO_byGEP_ABC",])
+coo[coo=="1"] <- "ABC"
+coo[fm_cga_order["B:SAMP:COO_byGEP_GCB",]==1] <- "GCB"
+coo[fm_cga_order["B:SAMP:COO_byGEP_Unclassified",]==1] <- "Unclassified"
+
+# data frame of sample annotations
+annot <- droplevels(data.frame(COO_byGEP = coo,
+                               IPI = as.factor(fm_cga_order["N:CLIN:IPI",])))
+levels(annot$IPI) <- c("NA", "0", "1", "2", "3", "4", "5")
+annot[is.na(annot)] <- "NA"
+
+# change mutation load of hypermutated sample
+fm_cga_order["N:SAMP:numberOfMutations",][fm_cga_order["N:SAMP:numberOfMutations",]==5956] <- 505
+
+## create heatmap annotations
+
+ha1 <- HeatmapAnnotation(CGA = anno_barplot(as.numeric(fm_cga_order["N:SAMP:nCGA",]), 
+                                                  bar_width = 0.75, 
+                                                  border = FALSE, 
+                                                  axis = TRUE,
+                                                  axis_param = list(gp = gpar(fontsize = 5, lwd = 0.5)),
+                                                  gp = gpar(col = NA, fill = "grey50"),
+                                                  ylim = c(0,8)),
+                         show_annotation_name = F,
+                         height = unit(0.5, "cm"))
+
+
+ha2 = HeatmapAnnotation(Mutations = anno_barplot(as.numeric(fm_cga_order["N:SAMP:numberOfMutations",]), 
+                                           bar_width = 0.75, 
+                                           border = FALSE, 
+                                           axis = TRUE,
+                                           axis_param = list(gp = gpar(fontsize = 5, lwd = 0.5)),
+                                           gp = gpar(col = NA, fill = "black")
+),
+CNVs = anno_barplot(as.numeric(fm_cga_order["N:SAMP:numberOfCNAs",]), 
+                  bar_width = 0.75, 
+                   border = FALSE, 
+                   axis = TRUE,
+                  axis_param = list(gp = gpar(fontsize = 5, lwd = 0.5)),
+                  gp = gpar(col = NA, fill = "black")
+),
+Purity = anno_barplot(as.numeric(fm_cga_order["N:SAMP:purity_absolute_reviewed",]), 
+                   bar_width = 0.75, 
+                   border = FALSE, 
+                   axis = TRUE,
+                   axis_param = list(gp = gpar(fontsize = 5, lwd = 0.5)),
+                   gp = gpar(col = NA, fill = "black")
+),
+df = annot,
+col = list(COO_byGEP = structure(brewer.pal(length(unique(annot$COO_byGEP)), "Set1"), 
+                                 names = as.character(unique(annot$COO_byGEP))),
+           IPI = structure(gsub("#D53E4F", "grey", rev(brewer.pal(length(unique(annot$IPI)), "Spectral"))), 
+                           names = sort(as.character(unique(annot$IPI))))
+),
+annotation_height = c(3, 3, 3, 3, 3),
+annotation_legend_param = list(COO_byGEP = list(title = "Subtype", title_gp = gpar(fontsize = 5), 
+                                                labels_gp = gpar(fontsize = 5), grid_height = unit(0.2, "cm"), grid_width = unit(2, "mm")),
+                               IPI = list(title = "IPI", title_gp = gpar(fontsize = 5), 
+                                          labels_gp = gpar(fontsize = 5), grid_height = unit(0.2, "cm"), grid_width = unit(2, "mm"))
+),
+gap = unit(0.75, "mm"),
+show_annotation_name = F,
+height = unit(1.5, "cm")
+)
+
+cor_adj_p <- cor_noduplicates$FDR[match(feat_original$featureB, cor_noduplicates$featureB)]
+
+zero_col_mat = matrix(nrow = nrow(mat), ncol = 0)
+rownames(zero_col_mat) <- cor_adj_p
+
+# make heatmap
+ht <- Heatmap(mat,
+              name = "oncoprint",
+              col = c("0" = "#EDEDED", "Nonsynonymous mutation" = "black", "Amplification/gain" = "#DC0000FF", "Deletion/loss" = "#3C5488FF", "Structural variation" = "#00A087FF"), 
+              rect_gp = gpar(col= "white", lwd = unit(0.4, "mm")),
+              top_annotation = ha1, 
+              bottom_annotation = ha2,
+              row_names_side = "left",
+              row_names_gp = gpar(fontsize = 7),
+              show_column_names = FALSE, 
+              show_column_dend = FALSE,
+              cluster_columns = FALSE,
+              cluster_rows = FALSE,
+              split = c(rep("CNV/SV",1), rep("Mutation",3)),
+              row_title_gp = gpar(fontsize = 5),
+              show_heatmap_legend = TRUE,
+              heatmap_legend_param = list(title = "Alteration",
+                                          title_gp = gpar(fontsize = 5),
+                                          labels_gp = gpar(fontsize = 5),
+                                          grid_height = unit(0.2, "cm"),
+                                          grid_width = unit(2, "mm"))
+) +
+  Heatmap(zero_col_mat,
+          row_names_gp = gpar(fontsize = 5))
+
+
+# oncoprint
+pdf("Figure6H_DLBCL_GSE98588_CGA_oncoprint.pdf", height = 1.5, width = 4.5)
+draw(ht, padding = unit(c(2, 5, 2, 2), "mm"))
+decorate_annotation("CGA", {
+  grid.text("CGA number", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 7))
+})
+decorate_annotation("Mutations", {
+  grid.text("Mutations", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 5))
+})
+decorate_annotation("CNVs", {
+  grid.text("CNVs", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 5))
+})
+decorate_annotation("Purity", {
+  grid.text("Purity", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 5))
+})
+decorate_annotation("COO_byGEP", {
+  grid.text("Subtype", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 5))
+})
+decorate_annotation("IPI", {
+  grid.text("IPI", unit(0, "npc") - unit(6, "mm"), 0.5, 
+            default.units = "npc", just = "right", gp = gpar(fontsize = 5))
+})
+dev.off()
+
+