【发布时间】:2020-08-28 05:42:00
【问题描述】:
我正在使用以下代码生成一个随机矩阵:
a <- round(matrix(c(runif(100, 10, 50)), byrow = T, ncol = 10), 2) ; a
我想创建一个与该矩阵对应的热图。所以我使用了以下代码:
makeColorRampPalette <- function(colors, cutoff.fraction, num.colors.in.palette) {
stopifnot(length(colors) == 4)
ramp1 <- colorRampPalette(colors[1:2])(num.colors.in.palette * cutoff.fraction)
ramp2 <- colorRampPalette(colors[3:4])(num.colors.in.palette * (1 - cutoff.fraction))
return(c(ramp1, ramp2))
}
cutoff.distance <- 30
cols <- makeColorRampPalette(c("white", "yellow", "yellow", "red"), cutoff.distance / max(b), 100)
library(pheatmap)
pheatmap(a, treeheight_row = 0, treeheight_col = 0, color = cols, display_numbers = T)
但是,热图的值与矩阵中的值的顺序不同。产生的矩阵是这样的:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 30.84 35.73 27.19 31.20 40.00 30.18 40.79 45.87 12.78 46.18
[2,] 43.11 29.70 35.56 45.72 43.70 31.33 34.07 36.88 16.08 27.11
[3,] 32.48 19.54 21.93 39.89 23.09 13.56 10.42 38.54 29.21 32.47
[4,] 21.09 41.88 41.21 24.49 24.45 45.23 21.41 44.73 33.96 32.85
[5,] 39.46 24.24 18.76 36.27 18.54 21.99 22.76 39.49 21.77 23.82
[6,] 37.28 40.39 30.66 26.30 47.54 14.26 19.26 36.07 24.42 10.02
[7,] 36.06 10.30 37.00 33.50 33.60 26.81 27.41 33.79 10.90 37.28
[8,] 37.98 31.93 38.70 31.24 43.76 32.37 35.47 37.14 30.99 49.50
[9,] 37.85 42.69 33.31 28.46 34.07 18.91 43.74 29.16 41.35 28.63
[10,] 10.75 38.09 31.11 44.74 15.77 32.78 20.02 33.39 19.49 23.87
但带有值的热图如下所示,您可以看到这些值是混合在一起的,而不是矩阵中的:
如何从矩阵创建精确对应的热图?也欢迎任何 ggplot2 解决方案。
【问题讨论】: