Я хотел бы раскрасить ветви для определенных меток в некорневом соседе, соединяющем деревья из входных данных гаплотипа. Эти два примера из akang и Уилл Хэмилтон. Они пытались ответить на этот вопрос, но ответы не соответствовали правильным цветам для определенных этикеток.
Первый пример. Здесь мы хотим раскрасить три группы из фрейма данных Iris (setosa, versicolor, virginica) в соседнем дереве соединения. Я включил rownames (Iris), чтобы определить имя для каждого образца, чтобы идентифицировать образцы на графике.
library(ape)
head(iris)
prefix <- "Sample"
suffix <- seq(1:150)
Sample <- paste(prefix,suffix, sep ="."); Sample
iris$Sample <- Sample
rownames(iris) <- iris$Sample
D <-dist(as.matrix(iris[, 1:4]))
tree <- nj(D)
str(tree)
plot(tree, type = "unr", show.tip.lab = TRUE, cex=0.3, font=1,
edge.col=c("red","green","blue")[iris$Species])
Проблема: образцы из каждой группы не окрашены должным образом. Некоторые образцы из разных групп имеют одинаковый цвет (т. Е. Одинаковый цвет для образцов из разноцветного и вирджинского)
Второй пример из Уилл Гамильтон. Мы хотим, чтобы Sample_A, Sample_B и Sample_E имели одинаковый оранжевый цвет на основе матрицы гаплотипов.
Sample <- c('Sample_A', 'Sample_B', 'Sample_C', 'Sample_D', 'Sample_E', 'Sample_F')
SNP_A <- c(0, 1, 1, 0, 1, 1)
SNP_B <- c(0, 1, 1, 0, 1, 1)
SNP_C <- c(0, 0, 1, 1, 1, 0)
SNP_D <- c(1, 1, 0, 0, 1, 0)
SNP_E <- c(0, 0, 1, 1, 0, 1)
SNP_F <- c(0, 0, 1, 1, 0, 1)
df = data.frame(Sample, SNP_A, SNP_B, SNP_C, SNP_D, SNP_E, SNP_F, row.names=c(1))
df
pdist = dist(as.matrix(df), method = "euclidean") #Euclidean distance
phylo_nj <- nj(pdist)#neighbour joining method
#Sample samples but adding some information for each sample
Factor_A <- c('a', 'a', 'b', 'c', 'a', 'b')
Factor_B <- c('d', 'e', 'd', 'd', 'e', 'd')
df2 = data.frame(Sample, Factor_A, Factor_B)
df2
labels_a <- df2$Factor_A %in% "a" #logical vector finding "a" in Factor A
## Which edges connect to these labels?
edge_a <- phylo_nj$edge[,2] %in% match(phylo_nj$tip.label, df2$Sample[labels_a])
## Plotting the factors with the labels a coerced as numeric
plot(unroot(phylo_nj), type = "unrooted", edge.color = c("blue", "orange")[edge_a+1])
Проблема: этот второй пример работает некорректно. Образцы A, B и E должны быть оранжевыми (то есть это а), но на графике E синего цвета. C оранжевый, но это b (должен быть синим). Я хочу, чтобы A, B, E = оранжевый; C, D, F = синий.
По сути, я хочу иметь возможность назначать цвета каждому краю из определенных меток. Это возможно?
?ape:::plot.phylo()
. Это основной метод при вызовеplot
объекта"phylo"
. - person jay.sf   schedule 27.06.2020phylo_nj$edge order
. Проблема в том, что phylo_nj $ edge имеет 9 строк для всех ребер, но есть 6 меток (SNP_A, B, C, D, E, F). Вы знаете, как связать эти два набора данных? Я пробовал два разных метода, но ничего не вышло. Спасибо - person Javier_HV   schedule 30.06.2020