我有一个 800 行和 30 列的大型数据框和一个长度为 800 的响应向量。我正在尝试创建一个热图,我想在其中并排显示热图和列,但是独立着色(响应变量的比例非常不同,因此我不想对两者使用相同的着色方案)。 目前我的热图看起来像这样(垂直线是作为我分析的一部分添加的,它们不是热图的一部分)。
但是我这里有一个小规模的可重现的例子:
mydf <- as.matrix(data.frame(A = sample(10, 20, replace = T),
B = sample(10, 20, replace = T),
C = sample(10, 20, replace = T),
D = sample(10, 20, replace = T),
E = sample(10, 20, replace = T)))
response <- sample(100, 20, replace = T)
mydf_order <- hclust(dist(mydf))$order
heatmap(mydf[mydf_order,], Rowv = NA, Colv = NA, labRow = as.character(mydf_order))
我能够生成分层聚类
mydf
的热图,但还想在其旁边显示 response
列并使用独立的着色方案,以便我可以查看 mydf
中的分组是否对应于response
谢谢你
一种方法是将响应变量映射到颜色渐变,例如。 g。使用 {scales} 包:
library(scales)
response_colors <- colour_ramp(c("blue", "red"))(response / max(response))
## > head(response_colors)
## [1] "#FA001C" "#D2007B" "#DF0062" "#AF00AD" "#E40058" "#4F00F2"
然后,将它们用于
RowSideColors
参数(确保顺序与重新排序的 mydf
的顺序相对应:
heatmap(mydf[mydf_order,],
Rowv = NA,
Colv = NA,
labRow = as.character(mydf_order),
RowSideColors = response_colors
)
结果: