在R中,如何从我的系统发育树中给标签上色?(使用来自ape的BioNj)

在R中,如何从我的系统发育树中给标签上色?(使用来自ape的BioNj),r,heatmap,R,Heatmap,所以我有一个数据集,看起来像这样: Pos sample_1 sample_2 celltypeX_sample3 celltypeY_sample4 celltypeX_sample5 0 0 0 3 0 1 2 2 1 3 0 0 5 0 0

所以我有一个数据集,看起来像这样:

Pos sample_1 sample_2 celltypeX_sample3 celltypeY_sample4 celltypeX_sample5
0     0        0              3                  0             1
2     2        1              3                  0             0
5     0        0              0                  0             1
6     1        0              0                  1             0
12    0        1              0                  1             1
根据该数据集,我可以用以下公式计算R中的相关矩阵和热图:

data = read.table(file = "fileNameX", row.names = 1, header = T, sep = "\t")
correlationData = cor(data)
heatmap(correlationData, cexRow = 0.25, cexCol = 0.25, symm = T)
在这之后,我想使用ape库的bionj功能建立一个系统发育树

arbol <- bionj(correlationData)

plot(arbol1, cex = 0.25, edge.width = 0.5)
有没有办法用这种方法给标签上色? 因此,名称中没有celltype的所有内容(因此命名为sample_x)应具有相同的颜色,所有单元格类型应具有相同的颜色(因此命名为celltypeX_sampleY)

我希望我的问题是明确的,甚至有可能做到这一点


指向的链接可以在plot.phylo函数中指定。bionj返回一个“phylo”类,当调用plot(arbol1,cex=0.25,edge.width=0.5)时,实际上使用的是plot.phylo。您可以键入?plot.phylo以查看选项

我没有您的数据,但下面我使用示例数据集添加颜色标签。。希望这是你想要的

library(ape)
data(woodmouse)
trw <- bionj(dist.dna(woodmouse))
# we label samples that have No120 as blue
# others orange
COLS = ifelse(grepl("No120",trw$tip.label),"blue","orange")
plot(trw,tip.color=COLS)

这看起来和我想要的完全一样,但是你能解释一下你是如何得到COLS变量的吗?你知道我如何从我的示例专栏中提取这个吗?当然。你的bionj结果(我的案例trw,你的案例arbol)将有一个标签。您只需根据您的逻辑/选择指定一种颜色。在您的情况下,试试COLS=ifelse(grepl(“celltype”,arbol$tip.label),“blue”,“orange”)。非常接近!但是有可能添加多种颜色吗?因此,没有单元类型的所有单元类型的颜色都是相同的-->类似于ifelse(grepl(“sample”,arbol$tip.label),“blue”,“orange”),但所有独特单元类型的颜色都不同?因此,cell1_样本13和cell1_样本54的颜色相同,但cell2_样本14的颜色不同。对不起,如果我不清楚!我已经编辑了我的答案。将来,提供完整的csv文件或矩阵的txt文件。会更容易。我猜你的数据集太棒了!我只是看到错误太多了=p打字太快了
library(ape)
data(woodmouse)
trw <- bionj(dist.dna(woodmouse))
# we label samples that have No120 as blue
# others orange
COLS = ifelse(grepl("No120",trw$tip.label),"blue","orange")
plot(trw,tip.color=COLS)
# from https://www.r-bloggers.com/the-paul-tol-21-color-salute/
tol18rainbow=c("#771155", "#AA4488", "#CC99BB", "#114477", "#4477AA", "#77AADD", "#117777", "#44AAAA", "#77CCCC", "#777711", "#AAAA44", "#DDDD77", "#774411", "#AA7744", "#DDAA77", "#771122", "#AA4455", "#DD7788")
# I assume here, the word before the "_" tells us how to colour the label
TYPE = gsub("_[^ ]*","",arbol$tip.label)
# check the TYPE numbers are correct
col_assignment = tol18rainbow[1:length(unique(TYPE))]
names( col_assignment) = unique(TYPE)
COLS = col_assignment[TYPE]
# then pass COLS into your plot