[8e0848]: / Fig5A_ligands_heatmap.R

Download this file

145 lines (108 with data), 6.5 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Plot Figure 5A immunomodulatory molecule heatmap
library(ComplexHeatmap)
library(circlize)
library(dendextend)
library(readxl)
library(RColorBrewer)
library(matrixStats)
# load Hemap gene expression data
data = get(load("data9544_with_gene_symbols.RData"))
# load Hemap annotations
annot = get(load("Hemap_immunology_Annotations.Rdata"))
annot = annot[!(annot$Category.specifying.lineage.tumor.origin=="MM"&annot$CELLS_SORTED==0),] # remove non-malignant myeloma samples
data = data[annot[,1],]
# modify annotations
annot$Category.specifying.subtype.Heatmap <- annot$plotNormals
annot$Category.specifying.subtype.Heatmap[annot$Sample.type%in%c("Cancer", "Prolif")] <- annot$Category.specifying.subtype[annot$Sample.type%in%c("Cancer", "Prolif")]
annot$Category.specifying.subtype.Heatmap[annot$Category.specifying.lineage.tumor.origin=="MDS"] <- "MDS"
annot$Category.specifying.subtype.Heatmap[annot$Category.specifying.lineage.tumor.origin=="AML"] <- "AML"
annot$Category.specifying.subtype.Heatmap[annot$Category.specifying.subtype=="AILT"] <- "AITL"
annot$Category.specifying.subtype.Heatmap[annot$Category.specifying.subtype=="LC"] <- "LCH"
# -----------------------
# list of immunomodulatory genes
ligands = read_excel("ligands.xlsx")
genelist = ligands$Gene
# Select cancer samples and summarize by cancer type medians
ligands_cancer <- data[annot$Sample.type%in%c("Cancer", "Prolif")&annot$Category.specifying.subtype.Heatmap!="na", colnames(data) %in% genelist]
ligands_cancer_median <- aggregate(ligands_cancer, by = list(annot$Category.specifying.subtype.Heatmap[annot$Sample.type%in%c("Cancer", "Prolif")&annot$Category.specifying.subtype.Heatmap!="na"]), FUN = "median")
rownames(ligands_cancer_median) <- ligands_cancer_median$Group.1
ligands_cancer_median$Group.1 <- NULL
# -----------------------
# select genes from expression matrix
mat_unscaled = t(ligands_cancer_median)
mat_unscaled = mat_unscaled[genelist,]
# scaale
mat = t(apply(mat_unscaled, 1, scale))
colnames(mat) <- colnames(mat_unscaled)
# remove genes with max log2 expression <5 (not expressed)
mat = mat[!rowMaxs(mat_unscaled)<5,]
# make another data matrix for receptor names for later use
mat_receptor <- mat
# add more common names of ligands in parentheses
ligands <- ligands[match(rownames(mat), ligands$Gene),]
rownames(mat) <- paste(ligands$Gene, paste0("(", ligands$`Common name`, ")"))
rownames(mat) <- gsub("\\ \\(NA\\)", "", rownames(mat))
rownames(mat) <- gsub("PD-1H", "", rownames(mat))
# make lineage annotation to heatmap
lineage <- colnames(mat)
lineage[grepl("AML|CML|MDS|JMML|Monocyte|Neutrophil|Myeloid|Dendritic|Macrophage|^LC|Langerhans|Erythroid", lineage)] <- "Myeloid"
lineage[grepl("CLL|HCL|FL|MM|MALT|MCL|MZL|CHL|NLPHL|BL|B-ALL|DLBCL|B cell|Germinal|Plasma", lineage)] <- "B cell"
lineage[grepl("AITL|ALCL|ATL|HSTCL|ENKTL|CTCL|PTCLNOS|T-ALL|T/NKcell", lineage)] <- "T/NK cell"
lineage <- as.data.frame(lineage)
mainclass <- colnames(mat)
mainclass[grepl("AML|CML|JMML|T-ALL|CLL|pre-B-ALL|HCL", mainclass)] <- "Leukemia"
mainclass[grepl("DLBCL|FL|MALT|MCL|MZL|CHL|NLPHL|BL|AI|ALCL|ATL|HSTCL|ENKTL|CTCL|PTCLNOS", mainclass)] <- "Lymphoma"
mainclass[grepl("MM|LC|MDS", mainclass)] <- "Other"
mainclass <- as.data.frame(mainclass)
heatmap_annot <- cbind(lineage, mainclass)
# heatmap annotations
ha1 = HeatmapAnnotation(df = heatmap_annot,
col = list(lineage = structure(brewer.pal(length(unique(heatmap_annot$lineage)), "Set2")[c(1,3,2)],
names = as.character(unique(heatmap_annot$lineage))[c(2,1,3)]),
mainclass = structure(brewer.pal(10, "Set3")[c(10,7,9)],
names = as.character(unique(heatmap_annot$mainclass))[c(2,1,3)])
),
annotation_legend_param = list(lineage = list(title = "Lineage", title_gp = gpar(fontsize = 10, fontface = "plain"),
labels_gp = gpar(fontsize = 10)),
mainclass = list(title = "Cancer type", title_gp = gpar(fontsize = 10, fontface = "plain"),
labels_gp = gpar(fontsize = 10))
))
# ligand cell type information annotation
ha2 = rowAnnotation(df = as.data.frame(ligands[5]),
col = list(`Immune checkpoint function` = structure(brewer.pal(length(unique(ligands$`Immune checkpoint function`)), "Paired")[c(3,2,1,4)],
names = as.character(unique(ligands$`Immune checkpoint function`))[c(3,2,1,4)])),
annotation_legend_param = list(`Immune checkpoint function` = list(title = "Immune checkpoint function", title_gp = gpar(fontsize = 10, fontface = "plain"),
labels_gp = gpar(fontsize = 10)), width = unit(0.25, "cm")))
# receptor names
zero_col_mat = matrix(nrow = nrow(mat), ncol = 0)
rownames(zero_col_mat) <- ligands$`Receptor common name`
rownames(zero_col_mat) <- gsub("\\, TNFSF14", "", rownames(zero_col_mat))
# dendrogram colors
dend = hclust(as.dist(1-cor(mat, method="spearman")), method = "ward.D")
dend = color_branches(dend, k = 3, col = c("#66C2A5", "#B3DE69", "#FC8D62"))
# print heatmap
pdf(file = "Figure5A_Hemap_ligands_heatmap.pdf", height = 8.5, width = 10)
draw(Heatmap(mat,
split = ligands$Split,
gap = unit(2, "mm"),
name = "Expression (log2)\nZ-score",
col = colorRamp2(c(seq(-2, 2, length.out = 9), 4), rev(brewer.pal(9, "RdBu"))[c(1:9,9)]),
rect_gp = gpar(col = "white", lty = 1, lwd = 1),
row_names_side = "right",
row_names_gp = gpar(fontsize = 9),
column_names_gp = gpar(fontsize = 10),
cluster_rows = FALSE,
clustering_distance_rows = "spearman",
clustering_method_rows = "ward.D",
cluster_columns = dend,
clustering_distance_columns = "spearman",
clustering_method_columns = "ward.D",
top_annotation = ha1,
heatmap_legend_param = list(title_gp = gpar(fontsize = 10, fontface = "plain"))
) +
Heatmap(zero_col_mat,
right_annotation = ha2,
row_names_gp = gpar(fontsize = 9)),
auto_adjust = F
)
dev.off()