0

我试图玩弄pheatmap并在一开始就陷入困境。

创建一个玩具示例:

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)

抛出此错误消息:

Error in unit(y, default.units) : 'x' and 'units' must have length > 0

它产生的情节似乎并不正确:

例如,我不明白为什么右上角的单元格是白色的。我还认为设置 cellwidth = 10cellheight = 10意味着获得方形单元格而不是矩形。最后,如果有人知道是否有可能让行名和列名出现在热图与树状图的同一侧(即,在树状图的尖端),那就太好了。 在此处输入图像描述

4

1 回答 1

2

好吧,您收到该错误的原因是您错误地使用了breaks=参数。从?pheatmap帮助页面

break : 一个数字序列,涵盖 mat 中的值范围,并且比颜色向量长一个元素。用于将值映射到颜色。有用,如果需要将某些值映射到某些颜色,映射到某些值。如果值为 NA,则自动计算休息时间。

您不能像使用其他函数那样只传递单个值。

我也不确定你在说什么细胞不是方形的。您正在绘制一个 30x30 的正方形(至少对我来说是这样)。因为您正在聚类,所以每个聚类只能获得一种颜色。

我猜问题的一部分可能是您只为 900 个单元格矩阵生成 90 个随机变量,因此这些值是重复的(您的数据非常结构化)。也许你的意思是

my.mat <- matrix(rnorm(900), nrow = 30, ncol = 30)

这样做会给你以下情节

在此处输入图像描述

于 2014-07-18T21:04:10.287 回答