13

I really like how the pheatmap package creates very nice looking heatmaps in R. However, I am trying to add x and y axis labels to the output (if one were just in plot(), one would use: xlab = 'stuff'). A simple example is as follows.

require(pheatmap)

## Generate some data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")

## Create the heatmap:
pheatmap(d)

The above yields the following heatmap:

Example of the above

I cannot for the life of me figure out how to add an 'xlab' or 'ylab' to this plot. Thoughts?

joshdr83
  • 499
  • 2
  • 5
  • 17
  • Strange, I see no solutions. I've also tried tu create a multipanel plot... It is also impossible to add a text on graph. As far as I know you can just use the main option as a "fake xlab". – FraNut Jan 10 '14 at 10:55

1 Answers1

14

The main issue here is that pheatmap, which uses grid package, creates a new grid page each time it is called. The solution I've found is:

library(pheatmap)
library(grid)

## Generate some data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")

## Create the heatmap:
setHook("grid.newpage", function() pushViewport(viewport(x=1,y=1,width=0.9, height=0.9, name="vp", just=c("right","top"))), action="prepend")
pheatmap(d)
setHook("grid.newpage", NULL, "replace")
grid.text("xlabel example", y=-0.07, gp=gpar(fontsize=16))
grid.text("ylabel example", x=-0.07, rot=90, gp=gpar(fontsize=16))

enter image description here

Baumann
  • 1,119
  • 11
  • 20