#r #ggplot2 #dendrogram #ape #ggdendro
Вопрос:
Я хочу создать график с классификацией нескольких элементов (Name1, Name2, Name3, …) по нескольким критериям (Столбец 1, Столбец 2, Столбец 3) в виде дендрограммы в R (мне нравится ортогональная эстетика дендрограмм с этой целью).
У меня есть следующий CSV (data.csv) с элементами и их классификацией по каждому критерию:
Name;Column1;Column2;Column3 Name1;A;C;D Name2;B;C;D Name3;A;C;E Name4;B;C;E Name5;B;C;D Name6;A;C;D Name7;A;D;E Name8;A;D;E Name9;B;D;E Name10;A;D;E
И следующий код R:
library(data.tree) library(DiagrammeR) library(ggdendro) data lt;- read.table(file = "data.csv", header = TRUE, sep = ";") data$pathString lt;- paste("stat", data$Column1, data$Column2, data$Column3, data$Name, sep = "/") pop lt;- as.Node(data) den lt;- as.dendrogram(pop) p1 lt;- ggdendrogram(den, labels = TRUE, rotate = TRUE, leaf_labels = TRUE) p1
В настоящее время я получаю следующее изображение без меток в не-листовых узлах:
Мне интересно, можно ли показать метки в каждом из не-листовых узлов в дендрограмме. Например, покажите «A» и «B» над каждым ребром (связанным с не-листовыми узлами) в решениях столбца 1, покажите «C» и «D» над каждым ребром в решениях столбца 2 и так далее. Кроме того, можно поместить названия предметов справа от рисунка? Заранее спасибо.
Ответ №1:
Попробуйте воспользоваться ape
пакетом.
# try loading a package, install if unavailable for(i in c("ape")){ if(!require(i, character.only = TRUE)){ install.packages(i, dependencies = TRUE) library(i, character.only = TRUE) } } # convert "Node" object to class "phylo" den2 lt;- as.phylo(pop) # plot.phylo options allow flexibility in display plot(den2, show.node.label = TRUE, label.offset = 1)
Комментарии:
1. Идеально! Я не знал
ape
, что это за посылка. Знаете ли вы, как разместить эти «перечеркнутые» метки на ветке над линией, а не посередине?2. @dreamco9 Попробуйте
plot(den2, show.node.label = FALSE); nodelabels(den2$node.label, adj = c(1.5, -1), frame = "none")
поэкспериментировать со значениями вadj
аргументе, чтобы найти подходящее положение меток.3. Это работает. Большое спасибо.