#r #ggplot2 #dendrogram #phylogeny #dendextend
#r #ggplot2 #дендрограмма #филогения #дендекстенд
Вопрос:
Я читаю в дереве ( .nex
), преобразую его в dendro
класс и строю его с помощью ggdendrogram
from ggplot2
. Как я могу расположить метки наконечников рядом с наконечниками на дендрограмме, а не внизу?
mytree <- read.nexus('mytree.nex')
den_data_mytree <- dendro_data(as.dendrogram(mytree))
pdf('mytree.pdf', h=55,w=55)
ggdendrogram(den_data_mytree, theme_dendro=F, labels=F)
labs(x = "x label", y = "y label", title = "Title")
geom_text(data = den_data_mytree$labels, aes(x, y, label = label,color=den_data_mytree$labels$group), hjust = 1.2, size = 9, angle=90)
scale_colour_manual(values=c("purple","orange"))
theme(axis.text=element_text(size=24), axis.title=element_text(size=54,face="bold"), title = element_text(size=54), legend.title = element_blank())
dev.off()
Результатом является это изображение:
Вот эти данные:
>dput(core_snp_tree)
structure(list(edge = structure(c(109L, ..., 108L), .Dim = c(213L, 2L)), edge.length = c(0.00373, 0, 3e-05, ..., 0.00844), Nnode = 106L, node.label = c("", "100.00", ..., "100.00"), tip.label = c("list","of","tip","labels"), root.edge = 0), class = "phylo", order = "cladewise")
Комментарии:
1. Можете ли вы опубликовать вывод
dput(mytree)
?2. Он имеет следующий формат:
> dput(core_snp_tree) structure(list(edge = structure(c(109L, ..., 108L), .Dim = c(213L, 2L)), edge.length = c(0.00373, 0, 3e-05, ..., 0.00844), Nnode = 106L, node.label = c("", "100.00", ..., "100.00"), tip.label = c("list","of","tip","labels"), root.edge = 0), class = "phylo", order = "cladewise")
3. Вывод dput кажется неправильным: « > core_snp_tree <- structure(список(edge = structure(c(109L, …, 108L), .Dim = c(213L, 2L)), edge. длина = c(0,00373, 0, 3e-05, …, 0,00844), Nnode = 106L, узел. метка = c(«», «100.00», …, «100.00»), подсказка.метка = c(«список», «из», «подсказка», «метки»), root.edge = 0), класс = «фило», порядок = «по порядку») Ошибка в структуре (c(109L, …, 108L), .Dim = c(213L, 2L)): ‘…’ используется в неправильном контексте «
Ответ №1:
Вероятно, вы захотите использовать пакет dendextend с hang.dendrogram
функцией вместе с ggdend (самый простой способ — использовать вызов ggplot для объекта dendrogram). В общем, dendextend::ggdend — это более расширенная версия ggdendro.
hc <- hclust(dist(USArrests[1:5, ]), "ave")
library(dendextend)
dend <- hang.dendrogram(as.dendrogram(hc))
library(ggplot2)
ggplot(dend)
Более подробную информацию смотрите здесь .
Комментарии:
1. Когда я пытаюсь выполнить команду dend <- hang.dendrogram(as.dendrogram(hc)) с моим деревом nexus (из Raxml), я получаю эту ошибку: ‘Ошибка в ape::as.hclust.phylo(объект): дерево не является ультраметрическим’ Что мне делать дальше?
2. Это означает, что у вас, вероятно, есть несколько ветвей, которые меньше, чем их листья. Вы должны взглянуть на свое дерево и посмотреть, имеет ли оно «смысл»
3. У вас также может быть пучок листьев высотой 0…