2015-09-07 28 views
5

Próbuję dodać kolor do krawędzi (linii) na wykresie typu filogenetycznego w R za pomocą polecenia plot.phylo od małpy pakiet. Ten przykład dotyczy wykresu typu "fan", choć spodziewam się, że podejście będzie takie samo z "typem phylogramu" lub czymkolwiek innym.Dendrogramuj kolory krawędzi (rozgałęzień), aby pasowały do ​​kolorów końcówek (liści) (pakiet małp)

library('ape') 
hc <- hclust(dist(USArrests), "ave") 
plot(as.phylo(hc), type="fan") 

Dodawanie koloru do końcówek (etykiety) opartych na zbiorze grup ma problemu z opcją tip.color połączeniu z poleceniem cutree.

hc.cuts <- cutree(hc, k=5) 
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts]) 

Opcja edge.color definiuje kolory krawędzi, ale nie w logiczny sposób, gdy pożądane jest użycie wielu kolorów.

plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts], edge.color=rainbow(5)[hc.cuts]) 

Chciałbym jednak, aby krawędzie pasowały do ​​kolorów końcówki końcówki, gdy gałąź dendrogramu jest przeznaczona dla danej grupy. W podanym przykładzie, w kierunku czerwonych grup &, pierwsze poziomy krawędzi pozostaną czarne (ponieważ będą skierowane do dwóch grup: czerwonej i niebieskiej), ale krawędzie poza tym będą miały taki sam kolor, jak ewentualny kolor końcówki.

Podejrzewam, że klucz leży w ustaleniu kolejności wartości $ edge w obiekcie as.phylo, ale nie potrafię tego samodzielnie. Dzięki.

+1

Dla znikoma szansa, że ​​nie otrzyma zadowalającej odpowiedzi, chciałbym poinformować, że istnieją również [dendextend] (https : // github.com/talgalili/dendextend) i pakiet [ggdendro] (https://github.com/andrie/ggdendro), być może jeden z nich może ci pomóc. Oba są całkiem nowe. – maj

+1

Hi Maj, the ggdendro by Andrie był pierwszym pakietem, który pomógłby stworzyć wykres dendrogram w ggplot2. Było to ograniczone tym, że nie uwzględniało różnych parametrów graficznych gałęzi/węzłów/liści drzewa. Dendextend ma funkcję o nazwie "as.ggdend" (która jest tak naprawdę widelcem ggdendro), która uwzględnia kolejne parametry graficzne drzewa. Więcej informacji na ten temat można znaleźć tutaj: https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#ggplot2-integration –

Odpowiedz

4

Jak sugeruje @maj w komentarzu, dendextend może ci pomóc, jeśli nie masz nic przeciwko używaniu tego pakietu. Jest bardzo elastyczny i ma obszerną dokumentację i winiety.

Oto przykład minimalnie dostosowany z dendextendu FAQ.

# install.packages("dendextend") 
# install.packages("circlize") 

library(dendextend) 
library(circlize) 

hc <- hclust(dist(USArrests)) 
dend <- as.dendrogram(hc) 

num_clades <- 5 

dend <- dend %>% 
    color_branches(k=num_clades, col=rainbow) %>% 
    color_labels(k=num_clades, col=rainbow) 

par(mar = rep(0, 4)) 
circlize_dendrogram(dend, dend_track_height = 0.8) 

wyprowadza ona

enter image description here

+1

Dokładnie tego, czego szukam, dzięki. Nie wiedziałem o pakiecie "dendextend". Śliczny! –