I am trying to plot a Heatmap. My data is as follows.
GO s_3d s_6d s_17d
peptide metabolic process 4.71E-29 2.84828E-20 2.70719E-24
organonitrogen compound biosynthetic process 3.38158E-22 3.26674E-15 6.3903E-22
positive regulation of gene expression 0.057421474
negative regulation of RNA metabolic process 0.05933718
G-protein coupled receptor signaling pathway 0.061777665
positive regulation of macromolecule biosynthetic process 0.061906369
negative regulation of nitrogen compound metabolic process 0.065645467
Basically the data has 4 columns and a LOT of NA values. I am using the function Heatmap.2 which usually has an option called na.color which can help me color the NA values to a distinct color
Since I have too many NA values, the heatmap function gives me an error
Error in hclustfun(distr) : NA/NaN/Inf in foreign function call (arg 11)
Therefore I tried to replace all NAs with zero and then give that a separate color. However the heatmap gives me a gradient even though I give the color separate. What I want is all 0's to be White and Everything which is not 0 to have a gradient from yellow to red. I do not want a gradient between white to yellow. How do I do this?
This is my code
rm(list = ls())
cat("\014")
if (!require("RColorBrewer")) {
install.packages("RColorBrewer", dependencies = TRUE)
library(RColorBrewer)
}
file <- "C:/Users/niran/Downloads/go_cluster.txt" #input
data <- read.table(file,header=T, sep = "\t",stringsAsFactors = F)
row.names(data) <- data[,1]
data <- data[-1]
# Since data is spread too far apart we can do a log transform to reduce the gaps
data[is.na(data)] <- 0 # Find possible solution for this
data <- -log10(data + 0.000000000001)
# creates a own color palette from yellow to red
color.palette <- colorRampPalette(c("#F8F8F8","yellow", "orange", "red"))(n=600)
col_breaks = c(seq(0,0.1,length=1), # for white
seq(0.1,2,length=100),
seq(2.01,4,length=100),
seq(4.01,6,length=100),
seq(6.01,8,length=100),
seq(8.01,10,length=100),
seq(10.01,12,length=100))
Heatmap <- heatmap.2(as.matrix(data),
main = "Heatmap of p-values for GO",
density.info = "none",
trace = "none",
margins = c(5,28),
key.xlab = "log10 Values",
cexRow = 1,
cexCol = 1.5,
keysize=0.75,
col = color.palette, # use on color palette defined earlier
breaks=col_breaks, # enable color transition at specified limits
dendrogram ="both")
dev.off()
Yes this is it! Didnt think of that. Thank you!