Метки в не-листовых узлах дендрограммы в R

#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   

В настоящее время я получаю следующее изображение без меток в не-листовых узлах:

Дендрограмма в R без меток в не-листовых узлах

Мне интересно, можно ли показать метки в каждом из не-листовых узлов в дендрограмме. Например, покажите «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. Это работает. Большое спасибо.