Is there a way to get pheatmap (in R) to not write over the existing row_names if I were to change fontface (ie. bold), fontsize (i.e. size = 20), and color (i.e. blue) of the rows?
By default, the color of the row or column text is black when making a pheatmap, but with a little tweaking, one can change the color of the text as I learned by this post: How to change color of rownames display in pheatmap; however, the code just writes over existing rownames. So, if you were to do anything aside from a color change (ex. increase font or change the fontface), then you see the issue - the rownames in black at the default font and fontface are still very visible in the background. Is there a way to not have the default font showing in the background?
Here is a reproducible example:
library(pheatmap) ; library(grid)
data <- replicate(16, rnorm(16))
rownames(data) <- paste0("OTU", c(1:nrow(data)))
colnames(data) <- paste("Sample", c(1:ncol(data)))
data = as.data.frame(data)
data$regulation = rep(c("up", "down"), each = 8)
data$colors = ifelse(data$regulation == "up", "red", "blue")
#Graphing
p = pheatmap(data[, 1:16])
cols = data[order(match(rownames(data), p$gtable$grobs[[5]]$label)), ]$colors #Assuming row labels are in grob 5
p$gtable$grobs[[5]]$gp = gpar(col = cols, fontsize = 15, fontface = "bold")
p
Here is the graph:
In attempts to do so, I've set the show_rownames = FALSE
and all this does is over-ride the code and no rownames are written at all.
Do you absolutely need to stick to
pheatmap
? ComplexHeatmap is a much better, easily customizable package that grew out of expanding pheatmap.use the same font size in pheatmap object (p) and clear graphics device.
How does this work? I would love to understand how turning off the graphics device translates to some new functionality in R.
This worked absolutely beautifully. Thank-you. Yes; I see a common theme here to check out
ComplexHeatmap
. Bc if it's more user friendly - and we aren't pulling rabbits outta hats (i.e. turning off graphics in the middle of graphing) to do simple things like this - it would be totally worth it. Thank-you again, cpad0112!What I personally love about ComplexHeatmap is its architecture - each object is designed the way a good Object Oriented Language would do it (which emulates real life very well) - You create a
HeatmapList
consisting of multipleHeatmap
s with any number ofColumnAnnotation
s andRowAnnotation
s, and draw them one after the other vertically or horizontally. There is no$gtable$grobs
, there's something likehmp_object$labels[hmp_object$row_order]
. Things make sense intuitively.