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.
Obtenez le livre — Practical Guide to Cluster Analysis in R (PDF)

Introduction

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 data
data("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 data
head(scale(USArrests), 4)
             Murder   Assault   UrbanPop         Rape
Alabama  1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska   0.50786248 1.1068225 -1.2117642  2.484202941
Arizona  0.07163341 1.4788032  0.9989801  1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602

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.

library(factoextra)

dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, cex = 0.5)   # cex = label size

A basic rectangular dendrogram of the standardized US Arrests data. State names are the leaves along the bottom; branches join at increasing heights up the vertical axis.

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.

Changez les titres avec main, sub, xlab et ylab :

library(factoextra)

dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, cex = 0.5,
          main = "Dendrogram - ward.D2",
          xlab = "Objects", ylab = "Distance", sub = "")

The US Arrests dendrogram with a custom main title 'Dendrogram - ward.D2', an x-axis labeled 'Objects' and a y-axis labeled 'Distance'.

Colorer les branches par regroupement

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 groups
          cex = 0.5,                               # label size
          k_colors = c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE,                # color labels by group
          rect = TRUE,                             # box around each group
          rect_border = c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07"),
          rect_fill = TRUE)

The US Arrests dendrogram cut into four clusters, each group's branches and labels in its own color, with a filled rectangle drawn around each of the four groups.

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 groups
          k_colors = "jco")

The US Arrests dendrogram cut into four clusters and colored with the journal 'jco' palette, with matching colored leaf labels.

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

The colored four-cluster US Arrests dendrogram drawn on a gray ggplot2 background using theme_gray().

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 :

library(factoextra)

dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE,
          k_colors = "jco",
          rect = TRUE, rect_border = "jco", rect_fill = TRUE)

A horizontal version of the four-cluster US Arrests dendrogram, with state names listed down the right side, branches colored by group with the jco palette, and a filled rectangle around each cluster.

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")

A circular dendrogram of the US Arrests data: the tree is wrapped into a ring with state-name leaves around the outside and branches colored into four clusters with the jco palette.

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é.

library(factoextra)

dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, k = 4, k_colors = "jco",
          type = "phylogenic", repel = TRUE)

A phylogenic-like tree of the US Arrests data, drawn in the branching tree-of-life style with state-name tips spread out and branches colored into four clusters with the jco palette.

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 dendextend
mycols <- c("#3a86d4", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
  set("branches_lwd", 1) %>%                   # branch line width
  set("branches_k_color", mycols, k = 4) %>%   # color branches by group
  set("labels_colors", mycols, k = 4) %>%      # color labels by group
  set("labels_cex", 0.5)                       # label size

# Draw the customized dendrogram
fviz_dend(dend)

A dendrogram of the US Arrests data customized with dendextend: branches and matching leaf labels colored by four groups, thin branch lines, and small label text.

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 :

library(factoextra)

dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))

A zoomed-in view of the left portion of the US Arrests dendrogram, restricted with xlim and ylim so only the first cluster's leaves and low branches are visible and readable.

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 data
dend_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 tree
fviz_dend(dend_cuts$upper)

A truncated, top-level view of the US Arrests dendrogram: the tree cut at height 10 so only the upper branches above the cut are shown.

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-tree
fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")

The first lower branch of the cut US Arrests dendrogram plotted on its own as 'Subtree 1', showing just the states in that group.

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 dendrogram
fviz_dend(dend_cuts$lower[[2]], type = "circular")

The second lower branch of the cut US Arrests dendrogram drawn as a circular sub-tree.

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 PDF
pdf("dendrogram.pdf", width = 30, height = 15)            # open a PDF device
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco")      # build the plot
print(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

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).

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).

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.

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.

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

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")
library(factoextra)
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

fviz_dend(hc, k = 3,
          k_colors = "npg",
          type = "circular")
  1. 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.)

  2. 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

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.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

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.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Visualiser des dendrogrammes en R : couleur et zoom.” 2026. June 24. https://www.datanovia.com/learn/machine-learning/clustering/visualizing-dendrograms.