2015-09-07 14 views
5

Sto cercando di aggiungere colore ai bordi (linee) di un grafico di tipo filogenetico in R usando il comando plot.phylo della scimmia pacchetto. Questo esempio è per una trama di tipo "fan", anche se prevedo che l'approccio sarebbe lo stesso con un "tipo di phylogram" o qualsiasi altra cosa.Colori dendrogramma (diramazioni) per abbinare i colori della punta (foglia) (pacchetto scimmia)

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

Aggiungere colore alle punte (etichette) sulla base di un insieme di gruppi non è un problema con l'opzione tip.color combinato con il comando cutree.

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

L'opzione edge.color definisce i colori dei bordi, ma non in maniera logincal quando molti colori sono desiderati.

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

Tuttavia, desidero bordi per abbinare i colori puntalino terminale volta che ramo del dendrogramma è destinato a un determinato gruppo. Nell'esempio riportato, verso i gruppi blu rossi &, i primi livelli di bordi rimarrebbero neri (poiché è diretto per due gruppi: rosso e blu), ma i bordi oltre questo sarebbero colorati come il colore dell'estremità finale.

Sospetto che la chiave stia nel capire l'ordine dei valori del bordo $ nell'oggetto as.phylo, ma non riesco a capirlo da solo. Grazie.

+1

Per la remota possibilità che non sarà possibile ottenere una risposta soddisfacente, vorrei farvi sapere che ci sono anche il [dendextend] (https : //github.com/talgalili/dendextend) pacchetto e il pacchetto [ggdendro] (https://github.com/andrie/ggdendro), forse uno dei due può aiutarti. Sono entrambi abbastanza nuovi anche loro. – maj

+1

Hi Maj, il ggdendro di Andrie è stato il primo pacchetto per aiutare a disporre di una trama di dendrogramma in ggplot2. Era limitato dal fatto che non teneva conto dei vari parametri grafici dei rami/nodi/foglie dell'albero. Il dendextend ha una funzione chiamata "as.ggdend" (che in realtà è un fork di ggdendro), che tiene conto di ulteriori parametri grafici dell'albero. Potete vederne di più qui: https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#ggplot2-integration –

risposta

4

Come suggerito da @maj in un commento, dendextend può aiutarti se non ti dispiace usare quel pacchetto. È molto flessibile e ha una vasta documentazione e vignette.

Ecco un esempio minimamente adattato dal dendextend 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) 

Produce

enter image description here

+1

Esattamente quello che sto cercando, grazie. Non sapevo del pacchetto 'dendextend'. Bello! –