Question:
Comment générer un tanglegram à code couleur?
AudileF
2017-06-27 15:17:45 UTC
view on stackexchange narkive permalink

Je veux comparer deux phylogénies et colorer les lignes d'association en fonction de certaines métadonnées dont je dispose. J'utilise le singe cophyloplot mais je n'ai pas réussi à faire colorer les lignes avec précision en fonction de mes données ( voir question précédente).

Notez que dans mon travail réel flow Je définis le jeu de couleurs en utilisant une palette pour contrôler le résultat de la couleur.

Je veux un moyen de créer un enchevêtrement en utilisant des phylogénies que je peux formater. De préférence dans R. J'aime obtenir une sortie comme celle-ci:

Quatre réponses:
benn
2017-06-27 17:30:56 UTC
view on stackexchange narkive permalink

Je pense que vous pouvez essayer dendextend, dans ce manuel il y a un exemple de coloration des branches. Je ne pense pas que ce soit exactement comme votre coloration, mais avec un petit ajustement, vous pourriez y insérer votre schéma de couleurs.

Le manuel mentionne un argument appelé color_lines pour la fonction tanglegram () :

  # Le paramètre `which` nous permet de choisir les éléments de la liste à compareriris_dendlist% >% dendlist (qui = c (1,4))% >% ladderize% >% # untangle (method = "step1side", k_seq = 3:20)% >% set ("rank_branches")% >% tanglegrames (common_subbranches) )  

Selon le manuel, le code ci-dessus produit une image comme celle-ci:

example of a colored tanglegram

Essayez de voir si vous pouvez y adapter votre palette de couleurs.

AudileF
2017-06-28 16:19:21 UTC
view on stackexchange narkive permalink

Merci à tous pour la réponse suggestions @ b.nota est utile pour colorer en fonction des groupes de clades mais ne répond pas à ma question réelle sur l'utilisation des métadonnées pour colorer les lignes. Pour cette réponse voir ci-dessous:

dendextend états pour color_lines un vecteur de couleurs pour les lignes connectées aux étiquettes. Si les couleurs sont plus courtes que le nombre d'étiquettes, elles sont recyclées (et un avertissement est émis). Les couleurs du vecteur sont appliquées sur les lignes de bas en haut.

  # Extraire les étiquettes du dendrogramme sur les étiquettes de gauche <- dendA% >% set ("labels_to_char")% >% labels # En utilisant une table de métadonnées avec des couleurs, créez un vecteur d'étiquettes de couleurs <- as.data.frame (labels) labels2 <- merge (labels, metadata, by.x = "labels", by.y = "Sample.name", sort = F) cols <- as.character (labels2 $ Colors) # Make tanglegramtanglegram (dendA, dendC, color_lines = cols)  

Note d'accompagnement si quelqu'un avec une phylogénie doit le convertir en dendrogramme pour essayer ceci sur leurs données, consultez mon autre question.

Bonjour AudileF, le vecteur de couleurs pour color_lines prend l'ordre des étiquettes dans l'arbre. Si vous voulez qu'il suive les étiquettes dans un autre ordre, vous devrez d'abord placer les couleurs dans le dataframe initial avec vos métadonnées, et diriger color_lines vers la colonne de droite du data frame. C'est difficile à expliquer sans aucun exemple.
Salut b.nota J'ai un exemple réalisable dans mon fil précédent lié ci-dessus, si cela est utile? Remplacez simplement «rtree» par «rcoal», comme vous l'avez mentionné plus tôt.
benn
2017-06-28 17:40:25 UTC
view on stackexchange narkive permalink

Pour obtenir vos couleurs dans l'ordre d'origine, vous pouvez créer un dataframe avec les étiquettes dans le bon ordre avec vos métadonnées. Vous pouvez utiliser merge pour cela.

Donc, d'après votre exemple de code, ce serait quelque chose comme ceci:

  site <- structure (list ( nom = structure (c (1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 2L), .Label = c ("t1", "t10", "t2", "t3", "t4 "," t5 "," t6 "," t7 "," t8 "," t9 "), class =" factor "), site = c (1L, 1L, 1L, 2L, 2L, 3L, 1L, 3L, 2L, 2L)), .Names = c ("nom", "site"), row.names = c (NA, 10L), class = "data.frame") bibliothèque (ape) bibliothèque (dendextend) t1 <- rcoal (10) t2 <- rcoal (10) str (site) # Les noms sont des facteurs maintenant, alors faites chr firstsite $ name <- as.character (site $ name) # faites un data.frame de vos labelslabels_df <- data .frame (t1 $ tip.label) #merge les 2 data.frames dans le bon ordre (d'où sort = F) couleurs <- merge (labels_df, site, by.x = "t1.tip.label", by.y = "nom", all.x = T, all.y = F, sort = F) tanglegram (t1, t2, color_lines = couleurs $ site)  
Merci b.nota. c'est quelque chose qui ressemble à un flux de travail que j'avais avant, mais toujours inexact pour obtenir les étiquettes de conseils dans le bon ordre. Voir ma réponse à partir de ce fil. J'ai essayé cela au cas où et cela ne résout toujours pas mon problème. Merci quand même.
Joe Healey
2017-06-27 18:44:49 UTC
view on stackexchange narkive permalink

En guise d'alternative (même si je me rends compte que cela ne répond pas vraiment directement à la question des OP), Dendroscope et Treemap peuvent également produire ces types de graphiques. Je ne sais pas s'ils feront des connexions colorées sur le dessus de ma tête, mais je pense qu'ils peuvent colorer différemment les branches des arbres.

Juste au cas où cela serait utile!



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...