Reputation: 6190
I'm trying to play around with pheatmap
and getting stuck at the very beginning.
Creating a toy example:
library(pheatmap)
set.seed(1)
my.mat <- matrix(rnorm(90), nrow = 30, ncol = 30)
rownames(my.mat) <- 1:30
colnames(my.mat) <- 1:30
col.scale = colorRampPalette(c("red", "blue"), space = "rgb")(10)
breaks.size = 11
pheatmap(my.mat, color = col.scale, breaks = breaks.size, border_color = NA, cellwidth = 10, cellheight = 10)
Throws this error message:
Error in unit(y, default.units) : 'x' and 'units' must have length > 0
And the plot it produces doesn't seem right:
For example, I can't understand why the top right cells are white. i also thought the setting cellwidth = 10
and cellheight = 10
means getting square cells and not rectangular. And finally, if anyone knows if it's possible to have the row names and col names apear on the same side of the heat map as the dendograms (i.e., at the tips of the dendogram), that'll be great.
Upvotes: 0
Views: 3239
Reputation: 206197
Well, the reason you are getting that error is that you are using the breaks=
parameter incorrectly. From the ?pheatmap
help page
breaks: a sequence of numbers that covers the range of values in mat and is one element longer than color vector. Used for mapping values to colors. Useful, if needed to map certain values to certain colors, to certain values. If value is NA then the breaks are calculated automatically.
You can't just pass a single value like you might with other functions.
Also i'm not sure what you are saying about the cells not being square. You are plotting a 30x30 square shape (at least it is for me). Because you are clustering, you're only getting one color per cluster.
I'm guessing part of the problem may be you're only generating 90 random variables for a 900 cell matrix so those values are repeating (your data is very structured). Perhaps you meant
my.mat <- matrix(rnorm(900), nrow = 30, ncol = 30)
doing so gives you the following plot
Upvotes: 2