Visualiser des dendrogrammes en R : couleur et zoom
Tracez des arbres de regroupement prêts à publier avec fviz_dend() — colorez les branches par groupe, ajoutez des rectangles, passez en horizontal, circulaire ou phylogénique, puis ajustez chaque ligne et étiquette avec dendextend et zoomez dans les grands arbres
Visualisez les dendrogrammes de classification hiérarchique en R. Utilisez fviz_dend() de factoextra pour tracer de beaux arbres rectangulaires, horizontaux, circulaires et de type phylogénique, colorez les branches par regroupement et encadrez chaque groupe, personnalisez les étiquettes et les branches avec set() de dendextend, et zoomez dans un grand dendrogramme ou tracez un de ses sous-arbres. Une recette pratique, prête à copier-coller, pour des figures d’arbres de regroupement nettes.
Date de publication
24 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Un dendrogramme est l’arbre que produit la classification hiérarchique. fviz_dend() (dans factoextra) le transforme en une figure nette, basée sur ggplot2, en une seule ligne.
Colorez les branches par regroupement avec k = 4 + k_colors = "jco" ; encadrez chaque groupe avec rect = TRUE ; colorez les étiquettes des feuilles pour les assortir avec color_labels_by_k = TRUE.
Changez de disposition avec un seul argument : horiz = TRUE (horizontale), type = "circular", ou type = "phylogenic" pour un rendu « arbre de vie » (nécessite igraph).
Pour un contrôle total sur chaque ligne, feuille et étiquette, convertissez avec as.dendrogram() et enchaînez les appels set() de dendextend ("branches_k_color", "labels_colors", "labels_cex").
Pour les grands arbres qui se chevauchent, zoomez avec xlim/ylim, ou coupez l’arbre avec cut() et tracez seulement les sous-arbres — ou enregistrez-le dans un grand PDF.
Vous avez réalisé une classification hiérarchique et vous voulez maintenant une figure qui montre vraiment les groupes — colorée, étiquetée, et assez soignée pour la glisser dans un article ou une diapositive. Cette figure est un dendrogramme : l’arbre qui enregistre comment les observations fusionnent en regroupements à chaque niveau de similarité.
Cette leçon est une recette pratique pour tracer et personnaliser des dendrogrammes en R. Nous nous appuyons sur deux outils :
fviz_dend() du package factoextra — trace un beau dendrogramme basé sur ggplot2 en un seul appel, avec des options intégrées pour colorer par regroupement, encadrer les groupes et basculer entre les dispositions rectangulaire, horizontale, circulaire et phylogénique.
le package dendextend — pour les cas que fviz_dend() ne couvre pas, il vous laisse définir la couleur, la largeur, le type et la taille de chaque branche, nœud et étiquette.
Nous abordons aussi le casse-tête pratique des grands dendrogrammes — quand les étiquettes se chevauchent en une tache noire — et comment zoomer, tracer un sous-arbre, ou enregistrer dans un PDF zoomable.
Les données
Nous utilisons le jeu de données USArrests intégré à R — arrestations pour 100 000 habitants pour Murder, Assault et Rape, plus le pourcentage UrbanPop, pour chaque État américain. Comme toujours, nous standardisons d’abord avec scale() (pour qu’une variable de grande magnitude ne domine pas), calculons la matrice de distances, et construisons l’arbre avec hclust(). C’est le même point de départ que la leçon classification hiérarchique.
# Load the datadata("USArrests")# Standardize, distance matrix, hierarchical clustering (Ward's method)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")# A peek at the standardized datahead(scale(USArrests), 4)
Tout ce qui suit trace cet unique objet hc. Pour le visualiser, nous utilisons fviz_dend() de factoextra ; la section de personnalisation plus loin ajoute dendextend. Installez-les une fois avec install.packages(c("factoextra", "dendextend")).
Un dendrogramme de base avec fviz_dend()
L’appel le plus simple passe le résultat de hclust() directement à fviz_dend(). L’argument cex règle la taille des étiquettes — réduisez-le sur les arbres chargés pour que les noms d’États restent lisibles.
Lisez-le de bas en haut : chaque feuille est un État, les États similaires se rejoignent en branches, et la hauteur à laquelle deux éléments fusionnent est leur dissimilarité — plus ils se rejoignent bas, plus ils se ressemblent.
Un arbre nu est difficile à lire. Dès que vous décidez d’un nombre de regroupements, coupez l’arbre à cet endroit et colorez chaque groupe. Passez k = (le nombre de groupes) et fviz_dend() colorera les branches, et — avec color_labels_by_k = TRUE — les étiquettes des feuilles pour les assortir. Ajoutez rect = TRUE pour tracer un rectangle autour de chaque regroupement, et rect_fill = TRUE pour le remplir.
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")fviz_dend(hc, k =4, # cut into 4 groupscex =0.5, # label sizek_colors =c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07"),color_labels_by_k =TRUE, # color labels by grouprect =TRUE, # box around each grouprect_border =c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07"),rect_fill =TRUE)
k_colors accepte n’importe quel vecteur de couleurs. Il accepte aussi des palettes nommées — les palettes RColorBrewer ("RdBu", "Blues", "Dark2", "Set2", …) et les palettes de revues scientifiques de ggsci ("npg", "aaas", "lancet", "jco", "ucscgb", "simpsons", …). Pour des groupes prêts à publier avec une coloration adaptée au daltonisme, "jco" (Journal of Clinical Oncology) est un excellent choix par défaut — et bien moins à taper qu’un vecteur composé à la main :
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")fviz_dend(hc, cex =0.5, k =4, # cut into 4 groupsk_colors ="jco")
Comme fviz_dend() renvoie un objet ggplot2, vous pouvez aussi changer toute l’apparence avec ggtheme = — n’importe quel thème officiel (theme_gray(), theme_bw(), theme_minimal(), theme_classic(), theme_void()) ou le vôtre :
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")fviz_dend(hc, k =4, cex =0.5,k_colors ="jco",color_labels_by_k =TRUE,ggtheme =theme_gray()) # change the theme
Dispositions horizontale, circulaire et phylogénique
Quand les noms d’États s’entassent au bas d’un arbre haut, une disposition différente se lit souvent mieux. fviz_dend() vous en offre trois avec un seul argument.
Un dendrogramme horizontal (horiz = TRUE) couche les étiquettes sur le côté — plus facile à lire quand il y a beaucoup de feuilles. Il se combine avec tout ce qui précède :
Un dendrogramme circulaire (type = "circular") enroule l’arbre en un anneau — compact, et pratique quand vous avez beaucoup de feuilles et pas de place pour un large tracé rectangulaire :
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")fviz_dend(hc, cex =0.5, k =4,k_colors ="jco", type ="circular")
Un arbre de type phylogénique (type = "phylogenic") dessine le rendu « arbre de vie » familier en biologie. Ajoutez repel = TRUE pour que les étiquettes ne se chevauchent pas. Cette disposition nécessite le package igraph installé.
La disposition phylogénique est contrôlée par phylo_layout = (par défaut "layout.auto"). D’autres valeurs utiles viennent d’igraph : "layout_with_drl", "layout_as_tree", "layout.gem", "layout.mds", "layout_with_lgl". Par exemple, phylo_layout = "layout.gem" donne un autre étalement — essayez-en quelques-unes et gardez la plus claire.
Personnaliser chaque ligne et étiquette avec dendextend
fviz_dend() couvre les cas courants. Quand vous avez besoin d’un contrôle plus fin — une couleur d’étiquette, une largeur de branche ou un type de ligne précis — convertissez l’arbre en objet dendrogram avec as.dendrogram() et utilisez la fonction set() de dendextend. Sa forme est set(object, what, value) : what nomme la propriété ("labels_colors", "branches_k_color", "branches_lwd", "labels_cex", …) et value est la valeur à lui donner.
L’opérateur de chaînage %>% (réexporté par dendextend) lit chaque étape de gauche à droite, de haut en bas. Ici nous définissons la largeur des branches, colorons branches et étiquettes par les 4 groupes, et réduisons les étiquettes — puis rendons le dendrogramme personnalisé directement à fviz_dend() :
library(factoextra)library(dendextend)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")# Customize the dendrogram with dendextendmycols <-c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07")dend <-as.dendrogram(hc) %>%set("branches_lwd", 1) %>%# branch line widthset("branches_k_color", mycols, k =4) %>%# color branches by groupset("labels_colors", mycols, k =4) %>%# color labels by groupset("labels_cex", 0.5) # label size# Draw the customized dendrogramfviz_dend(dend)
Quelques-unes des valeurs what les plus utiles :
what
Définit
"labels", "labels_colors", "labels_cex"
les étiquettes des feuilles, leur couleur et leur taille
"leaves_pch", "leaves_col", "leaves_cex"
les points des feuilles : forme, couleur, taille
"nodes_pch", "nodes_col", "nodes_cex"
les points des nœuds : forme, couleur, taille
"branches_k_color"
colore les branches par les k regroupements
"branches_col", "branches_lwd", "branches_lty"
couleur, largeur de ligne, type de ligne des branches
"clear_branches", "clear_leaves"
réinitialise le style des branches / feuilles
dendextend construit aussi l’arbre lui-même par chaînage si vous préférez — scale %>% dist %>% hclust(method = "ward.D2") %>% as.dendrogram — et vous pouvez aussi tracer un dendrogramme avec plot(dend) de base.
Grands dendrogrammes : zoom et sous-arbres
Sur un gros jeu de données, les étiquettes s’effondrent en une tache illisible. Trois solutions : zoomer sur une partie du tracé, tracer seulement un sous-arbre, ou enregistrer dans un grand PDF que vous pouvez faire défiler.
Zoomez avec xlim et ylim pour limiter la zone du tracé — pratique pour inspecter de près les premiers regroupements :
Pour tracer un sous-arbre, coupez le dendrogramme avec la fonction cut() de base à une hauteur h. Elle renvoie une liste avec $upper (une version tronquée de l’arbre entier) et $lower (les branches sous la coupe, chacune son propre dendrogramme). Tracez d’abord l’arbre entier et extrayez ses données de dendrogramme, puis coupez :
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")# Whole dendrogram, then extract its dendrogram datadend_plot <-fviz_dend(hc, k =4, cex =0.5, k_colors ="jco")dend_data <-attr(dend_plot, "dendrogram")# Cut at height 10 -> $upper (truncated tree) and $lower (branches)dend_cuts <-cut(dend_data, h =10)# The truncated upper treefviz_dend(dend_cuts$upper)
Chaque branche sous la coupe se trouve dans dend_cuts$lower[[i]] — tracez-en n’importe laquelle seule (ici en petit multiple), et vous pouvez aussi donner une disposition circulaire à un sous-arbre :
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")dend_plot <-fviz_dend(hc, k =4, cex =0.5, k_colors ="jco")dend_cuts <-cut(attr(dend_plot, "dendrogram"), h =10)# Plot the first lower sub-treefviz_dend(dend_cuts$lower[[1]], main ="Subtree 1")
library(factoextra)dd <-dist(scale(USArrests), method ="euclidean")hc <-hclust(dd, method ="ward.D2")dend_plot <-fviz_dend(hc, k =4, cex =0.5, k_colors ="jco")dend_cuts <-cut(attr(dend_plot, "dendrogram"), h =10)# A sub-tree as a circular dendrogramfviz_dend(dend_cuts$lower[[2]], type ="circular")
Enfin, pour un arbre trop grand pour être réduit, enregistrez-le dans une grande page PDF — vous gardez chaque étiquette et pouvez zoomer dans votre lecteur PDF sans aucune perte de résolution :
# Save a large dendrogram to a zoomable PDFpdf("dendrogram.pdf", width =30, height =15) # open a PDF devicep <-fviz_dend(hc, k =4, cex =1, k_colors ="jco") # build the plotprint(p)dev.off() # close the PDF
Essayez en direct
Tracez votre propre dendrogramme. Changez k pour découper en un nombre de groupes différent, remplacez type par "circular" ou "phylogenic", ou essayez une autre palette ("npg", "lancet", "Dark2"). Cliquez sur Run.
🟢 Avec un agent IA
Demandez à Prova« trace un dendrogramme coloré de mes données découpé en 4 groupes » — elle répond avec du code fviz_dend() que vous pouvez exécuter sur votre propre objet hclust(), puis vous aide à choisir une disposition, colorer les regroupements et zoomer dans un grand arbre. The runtime is the judge.Demander à Prova →
Problèmes fréquents
Les étiquettes se chevauchent en une tache noire sur un grand arbre. Avec beaucoup de feuilles, les noms d’États (ou de lignes) se télescopent. Réduisez-les avec cex (par ex. cex = 0.3), passez à une disposition horizontale (horiz = TRUE) ou circulaire (type = "circular"), zoomez avec xlim/ylim, tracez seulement un sous-arbre avec cut(), ou enregistrez dans un grand PDF. Il n’existe pas de taille d’étiquette unique qui règle un arbre de 500 feuilles — changez plutôt de disposition.
Les couleurs des branches ne correspondent pas à mes regroupements.k_colors colore les branches dans l’ordre de coupe, qui n’est pas les numéros de regroupement issus de cutree(). Si vous avez besoin que les couleurs du dendrogramme s’alignent sur un regroupement cutree() précis (par ex. pour les assortir à un nuage de points), colorez avec set("branches_k_color", value, k = 4) de dendextend, où vous contrôlez explicitement le vecteur de couleurs, plutôt que de vous reposer sur k_colors.
type = "phylogenic" génère une erreur ou ne fait rien. La disposition phylogénique nécessite le package igraph. Installez-le (install.packages("igraph")) avant d’utiliser type = "phylogenic". Ajoutez repel = TRUE pour que les étiquettes des extrémités ne se chevauchent pas.
Un dendrogramme plot(hc) de base et un dendrogramme fviz_dend() ont une apparence différente.plot(hc) utilise les graphiques de base ; fviz_dend() renvoie un objet ggplot2 — c’est pourquoi il accepte ggtheme = et se compose avec ggplot2. Pour le style ggplot2 et les options colorées/encadrées présentées ici, utilisez fviz_dend() ; pour un arbre vite fait et jetable, plot() de base convient.
Questions fréquentes
NoteComment colorer un dendrogramme par regroupement en R ?
Utilisez fviz_dend() de factoextra : passez k = (le nombre de groupes) plus k_colors = (un vecteur de couleurs ou une palette nommée comme "jco"), et color_labels_by_k = TRUE pour colorer les étiquettes des feuilles afin de les assortir. Ajoutez rect = TRUE pour tracer un rectangle autour de chaque regroupement. Pour contrôler entièrement quelle couleur va à quelle branche, utilisez dendextend : as.dendrogram(hc) %>% set("branches_k_color", mycols, k = 4).
NoteComment faire un dendrogramme circulaire en R ?
Passez type = "circular" à fviz_dend() : fviz_dend(hc, k = 4, k_colors = "jco", type = "circular"). Une disposition circulaire enroule l’arbre en un anneau et est bien plus compacte qu’un large tracé rectangulaire quand vous avez beaucoup de feuilles. Pour un rendu « arbre de vie » à la place, utilisez type = "phylogenic" (qui nécessite le package igraph).
NoteComment personnaliser un dendrogramme avec dendextend ?
Convertissez l’arbre avec as.dendrogram(hc), puis enchaînez les appels set() de dendextend avec %>%. Par exemple, set("branches_k_color", mycols, k = 4) colore les branches par groupe, set("labels_colors", mycols, k = 4) colore les étiquettes, set("branches_lwd", 1) définit la largeur de ligne, et set("labels_cex", 0.5) réduit les étiquettes. Vous pouvez ensuite tracer le résultat avec fviz_dend(dend) ou plot(dend) de base.
NoteComment tracer un grand dendrogramme pour que les étiquettes soient lisibles ?
Plusieurs options : réduire les étiquettes avec cex, passer à une disposition horizontale (horiz = TRUE) ou circulaire (type = "circular"), zoomer sur une région avec xlim/ylim, ou couper l’arbre avec cut(dend_data, h = 10) de base et tracer seulement l’arbre tronqué $upper ou un sous-arbre $lower individuel. Pour un arbre très grand, enregistrez-le dans un grand PDF (pdf("tree.pdf", width = 30, height = 15)) que vous pouvez zoomer sans perdre de résolution.
NoteQuelle est la différence entre fviz_dend() et plot() de base pour les dendrogrammes ?
fviz_dend() (factoextra) renvoie un objet ggplot2, il accepte donc ggtheme =, se compose avec ggplot2, et possède des options intégrées k/k_colors/rect/type pour des arbres colorés, encadrés, circulaires et phylogéniques. plot(hc) de base (ou plot(as.dendrogram(hc))) utilise les graphiques de base et convient pour un coup d’œil rapide, mais vous obtenez le style riche et les palettes de revues avec fviz_dend() et dendextend.
Testez vos connaissances
ImportantExercice : un dendrogramme circulaire et coloré
Tracez un dendrogramme circulaire des données USArrests standardisées, découpé en 3 groupes, coloré avec la palette de revue « npg ».
# k = 3, k_colors = "npg", type = "circular"
library(factoextra)
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
fviz_dend(hc, k = 3,
k_colors = "npg",
type = "circular")
Conceptuel. Vous voulez tracer un rectangle autour de chacun des 4 regroupements et colorer les étiquettes des feuilles pour les assortir aux branches. Quels deux arguments de fviz_dend() réglez-vous ? (Réponse : rect = TRUE encadre chaque groupe, et color_labels_by_k = TRUE (avec k = 4) colore les étiquettes par regroupement.)
Conceptuel. Votre dendrogramme a 500 feuilles et les étiquettes forment une tache illisible. Nommez deux choses que vous pouvez faire. (Réponse : deux parmi — réduire les étiquettes avec cex, passer à horiz = TRUE ou type = "circular", zoomer avec xlim/ylim, tracer un sous-arbre via cut(), ou enregistrer dans un grand PDF.)
Conclusion
fviz_dend() transforme un résultat hclust() en un dendrogramme prêt à publier en une seule ligne : découpez-le et colorez-le avec k + k_colors, encadrez les groupes avec rect = TRUE, et changez de disposition avec horiz = TRUE, type = "circular" ou type = "phylogenic". Quand vous avez besoin d’un contrôle plus fin, convertissez avec as.dendrogram() et stylisez chaque branche et étiquette avec set() de dendextend. Et quand l’arbre devient trop grand pour être lu, zoomez, tracez un sous-arbre, ou enregistrez dans un grand PDF. Avec ces recettes, vous pouvez produire une figure d’arbre de regroupement nette et parlante pour n’importe quel jeu de données.
Leçons connexes
Pour aller plus loin sur ce sujet :classification hiérarchique — construisez l’arbre que cette leçon trace (distance, hclust(), méthodes de saut, cutree()) ; comparer des dendrogrammes — alignez deux arbres côte à côte avec des tanglegrammes et corrélez-les ; nombre optimal de regroupements — décidez en combien de groupes découper l’arbre ; k-means — l’alternative par partitionnement quand vous connaissez déjà k.
Vous préférez un livre ? Practical Guide to Cluster Analysis in R est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.
Prouvez que vous savez le faire. Maîtrisez toute la série Analyse de clustering en R — suivez votre parcours, construisez des projets et obtenez un certificat.
@online{2026,
author = {},
title = {Visualiser des dendrogrammes en R : couleur et zoom},
date = {2026-06-24},
url = {https://www.datanovia.com/learn/machine-learning/clustering/visualizing-dendrograms},
langid = {fr}
}