您好我正在使用heatmap.2
在R中制作热图。我想使用RowSideColors选项。但是,我无法弄清楚如何轻松地为行创建颜色矢量。
行代表细菌,我有一个数据框,其中包含我想用于着色的细菌信息。我将使用Bact_Phylo_Info$Phylum
或k来创建颜色矢量。
> str(Bact_Phylo_Info)
'data.frame': 33 obs. of 3 variables:
$ Phylum: Factor w/ 7 levels "Actinobacteria",..: 4 3 3 2 2 2 2 2 5 5 ...
$ Order : Factor w/ 10 levels "Bacteroidales",..: NA 4 4 1 1 1 1 1 NA 5 ...
$ Family: Factor w/ 13 levels "Anaplasmataceae",..: NA 4 4 NA 11 2 11 12 NA NA ...
我尝试过一些东西,例如下面的疯狂循环,但我认为必须有一种我想念的简单方法。任何帮助表示赞赏。
BactPhyColors <- sapply(Bact_Phylo_Info$Phylum,
if (Bact_Phylo_Info$Phylum == levels(Bact_Phylo_Info$Phylum)[i]),
rainbow(length(levels(Bact_Phylo_Info$Phylum)))[i]
}
)
答案 0 :(得分:4)
如果我很清楚你想要做什么:你有一个变量编码作为一个因素,你试图将其转换为颜色? 是否创建了一些离散的比例颜色?
这里我使用brewer_pal
包中的scales
来创建一个brewer调色板。然后将其与因子变量合并。
library(scales)
dat <- data.frame(Phylum = gl(7,2))
n <- nlevels(dat$Phylum)
dat.col <- data.frame(Phylum =unique(dat$Phylum),
BactPhyColors =brewer_pal()(n)) ## you can also use rainbow(n)
merge(dat,dat.col)
merge(dat,dat.col)
Phylum BactPhyColors
1 1 #EFF3FF
2 1 #EFF3FF
3 2 #C6DBEF
4 2 #C6DBEF
5 3 #9ECAE1
6 3 #9ECAE1
7 4 #6BAED6
8 4 #6BAED6
9 5 #4292C6
10 5 #4292C6
11 6 #2171B5
12 6 #2171B5
13 7 #084594
14 7 #084594