R:为什么Heatmap会为具有相同数字的行显示白色?

时间:2013-10-28 16:02:56

标签: r heatmap

在以下示例中,包含3列和5行的矩阵。当我创建一个热图时,任何具有相似数字的行(如下面的示例(0.3,0.3,0.3))都会在热图中显示白色。我的目的是将其改为任何理想的颜色。 示例:这是一个示例:

    A = matrix(c(0.0183207, 0.0000000, 0.1468750, 0.03, 0.03, 0.03,0.4544720,0.0000000,0.1395850,0.002,0,0,1.1,1,1),nrow=5,ncol=3,byrow = TRUE) 
dimnames(A) = list(c("row1", "row2","row3","row4","row5"),c("col1", "col2", "col3"))
heatmap.2( A,col =redgreen, scale = "row", cexRow=0.3, cexCol=0.8, margins=c(6,6), trace="none")

In the example, we see a row is white color which came from the row data (0.3,0.3,0.3)

非常感谢您的帮助

2 个答案:

答案 0 :(得分:2)

颜色为白色,因为热图命令会在绘制热图之前缩放行。因此,行c(0.3,0.3,0.3)变为一行零,并且在该颜色方案中零用白色表示。

如果您想要这些行的其他颜色方案,您必须考虑是否确实要缩放行或使用breakscol参数来为值0创建单独的颜色。 / p>

答案 1 :(得分:0)

缩放常量向量时会发生什么?你告诉R除以0,得到你NaN

scale(c(0.3, 0.3, 0.3))

当您告诉heatmap.2按行缩放时,会发生这种情况,但其中一行没有变化。由于NaN不是数字,因此将其绘制为白色。如果你想改为黑色,那么我认为你应该事先手动扩展你的数据,并用{0}替换NaN

scaled_A <- t(apply(A, MARGIN=1, FUN=scale))
scaled_A[is.nan(scaled_A)] <- 0

然后你可以进行热图呼叫

heatmap.2( scaled_A,col =redgreen,
           scale = "none",
           cexRow=0.3, cexCol=0.8,
           margins=c(6,6), trace="none",
           dendrogram='none')

它是黑色的。它似乎按顺序切换顺序,但你可能想出如何解决这个问题。