library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
coord_flip() +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_minimal()
Faites pivoter un graphique à l’horizontale et inversez le sens d’un axe — en direct dans votre navigateur
Apprenez à faire pivoter un graphique ggplot2 à l’horizontale avec coord_flip() — barres, boîtes et histogrammes horizontaux — et à inverser le sens d’un axe avec scale_y_reverse()/scale_x_reverse(). Modifiez et exécutez le code en direct, sans rien installer.
20 juin 2026
7 juillet 2026
coord_flip() intervertit les axes x et y, transformant tout graphique vertical en graphique horizontal — les catégories se déroulent alors sur le côté, où les libellés longs se lisent sans peine.coord_flip() fait pivoter tout le panneau ; pour inverser le sens d’un axe (du plus élevé au plus faible) utilisez plutôt scale_y_reverse() ou scale_x_reverse().Parfois un graphique se lit mieux de côté. Les libellés de catégories se chevauchent sur un axe x encombré, ou un diagramme en barres classé se parcourt tout simplement plus naturellement de haut en bas. En R, ggplot2 fait pivoter n’importe quel graphique à l’horizontale avec une seule couche — coord_flip() — et inverse le sens d’un axe avec scale_y_reverse() / scale_x_reverse(). Cette leçon couvre les deux idiomes étape par étape ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.
L’idiome pivoter/inverser est la vedette ici. Les types de graphiques sous-jacents — barres, boîtes, histogrammes — sont enseignés en détail dans leurs propres leçons (diagramme en barres, boîte à moustaches) ; cette leçon ne les emprunte que pour démontrer la rotation.
Nous utilisons le jeu de données intégré ToothGrowth : la longueur des cellules odontoblastes (len) chez des cobayes recevant de la vitamine C à trois doses (dose : 0,5, 1 ou 2 mg/jour) via deux modes d’administration (supp : jus d’orange OJ ou acide ascorbique VC). Pour l’exemple d’inversion d’axe à série unique, nous passons à faithful (temps d’attente entre les éruptions de l’Old Faithful) afin de montrer une distribution.
L’idiome de base : construisez un graphique vertical normal, puis ajoutez coord_flip(). Il intervertit les axes x et y de sorte que les catégories se déroulent sur le côté et que les valeurs progressent de gauche à droite — rien d’autre dans le code ne change.

Remarquez que x reste la dose et y reste la longueur dans le code — vous associez les données de la même manière et laissez coord_flip() faire la rotation. C’est tout le secret.
L’application la plus précieuse : un diagramme en barres horizontal. Résumez les données à une valeur par groupe, dessinez les barres avec geom_col(), puis pivotez. Ici nous calculons la longueur moyenne par dose dans le bloc avec aggregate() de base (aucun paquet supplémentaire), pour que cet exemple s’exécute de façon autonome.
library(ggplot2)
# mean length per dose, computed in-block with base R
tg_means <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_means, aes(x = factor(dose), y = len)) +
geom_col(fill = "#3a86d4", alpha = 0.9) +
coord_flip() +
labs(x = "Dose (mg/day)", y = "Mean tooth length") +
theme_minimal()
geom_col() utilise les valeurs telles quelles (une barre par ligne) ; geom_bar() compterait plutôt les lignes. La grammaire complète du diagramme en barres — empilé, juxtaposé, comptages vs valeurs — se trouve dans la leçon sur le diagramme en barres ; ici il n’est que la toile de fond du pivotement.
Les barres horizontales brillent lorsque les catégories sont classées et les libellés longs. Réordonnez les barres selon leur valeur avec reorder() pour que le graphique raconte une histoire de haut en bas, et la disposition pivotée donne à chaque libellé sa propre ligne — pas d’encombrement, pas de texte incliné.
library(ggplot2)
# mean length per dose x supplement combination, in-block
tg_grp <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
tg_grp$group <- paste0(tg_grp$supp, " ", tg_grp$dose, " mg")
ggplot(tg_grp, aes(x = reorder(group, len), y = len)) +
geom_col(fill = "#3a86d4", alpha = 0.9) +
coord_flip() +
labs(x = "Group", y = "Mean tooth length") +
theme_minimal()
Voici l’argument de lisibilité en une seule image : une liste classée et étiquetée se lit bien plus facilement sur le côté qu’en travers d’un axe x à l’étroit. (Pour plutôt faire pivoter le texte des libellés d’axe d’un certain angle tout en gardant le graphique vertical, voir graduations et libellés d’axe — c’est une correction différente du pivotement de tout le graphique.)
Le pivotement se combine avec tout le reste. Associez une seconde variable à fill pour des barres groupées (juxtaposées), colorez-les avec une échelle viridis adaptée au daltonisme, puis ajoutez coord_flip() — la légende et la juxtaposition survivent à la rotation.
library(ggplot2)
tg_grp <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
ggplot(tg_grp, aes(x = factor(dose), y = len, fill = supp)) +
geom_col(position = "dodge") +
scale_fill_viridis_d() +
coord_flip() +
labs(x = "Dose (mg/day)", y = "Mean tooth length", fill = "Supplement") +
theme_minimal()
coord_flip() fonctionne tout aussi bien sur une distribution. Dessinez un histogramme, puis pivotez-le pour que les barres grandissent de côté — pratique lorsque vous voulez l’axe des valeurs vertical afin de l’aligner avec un autre panneau.
Le pivotement change l’orientation ; l’inversion change le sens dans lequel un axe progresse. Utilisez scale_y_reverse() pour que l’axe y aille du plus élevé au plus faible — utile lorsqu’une valeur plus petite doit se situer en haut (rangs, profondeurs, scores à la manière du golf).

Les barres pendent désormais depuis le haut au lieu de reposer sur le bas — mêmes données, sens inversé, et non orientation inversée.
scale_x_reverse() fait de même pour l’axe x : les valeurs progressent du plus élevé à gauche au plus faible à droite. Ici les temps d’attente de l’Old Faithful se déroulent à l’envers le long du bord inférieur.

Optez pour scale_*_reverse() lorsque le sens va dans l’autre direction, et pour coord_flip() lorsque vous voulez seulement faire pivoter le graphique. Pour un contrôle complet des limites, graduations et transformations d’axe (échelles logarithmiques et consorts), voir limites et échelles d’axe.
Les graphiques ci-dessus ont été rendus au moment de la compilation. Envie d’expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (sans serveur, sans installation). Essayez de retirer coord_flip() pour voir la version verticale, ou remplacez-le par scale_y_reverse().
Vous travaillez en Python ? Un guide matplotlib pour les barres horizontales / barh arrive bientôt dans la série Python.
Demandez à Prova « dois-je utiliser coord_flip() ou scale_y_reverse() pour placer ma plus petite barre en haut ? » — elle répond avec du code que vous pouvez exécuter, donc l’explication est reproductible. The runtime is the judge. Ask Prova →
coord_flip() change l’orientation — il intervertit les axes x et y de sorte qu’un graphique vertical devient horizontal, les catégories se déroulant sur le côté. scale_y_reverse() change le sens — il laisse l’axe à sa place mais le fait progresser du plus élevé au plus faible. Pivoter fait tourner le graphique ; inverser change l’extrémité à partir de laquelle les valeurs commencent.
Construisez le diagramme en barres comme d’habitude avec geom_col() (ou geom_bar()), puis ajoutez coord_flip() comme couche suivante — par exemple ggplot(df, aes(x = group, y = value)) + geom_col() + coord_flip(). Les catégories se déroulent sur le côté, ce qui est idéal pour les libellés longs.
Par défaut, les barres suivent l’ordre des niveaux du facteur, et non leur valeur, si bien qu’un graphique pivoté peut sembler non trié. Enveloppez la catégorie dans reorder() selon la valeur — aes(x = reorder(group, len), y = len) — pour que les barres se classent proprement de la plus courte à la plus longue sur le côté.
Ajoutez scale_x_reverse(), qui fait progresser x du plus élevé à gauche au plus faible à droite tout en laissant le graphique droit. Utilisez scale_y_reverse() pour le même effet sur l’axe y. Optez pour celles-ci — et non coord_flip() — lorsque seul le sens des valeurs doit changer.
Oui — coord_flip() fonctionne sur n’importe quel geom sans changer le reste du code. Ajoutez-le à un geom_boxplot(), un geom_histogram() ou toute autre couche et le panneau pivote à l’horizontale, légende et juxtaposition comprises.
Complétez le code pour que le diagramme en barres soit pivoté à l’horizontale.
library(ggplot2)
tg_means <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_means, aes(x = factor(dose), y = len)) +
geom_col(fill = "#3a86d4") +
coord_flip()
Vous avez fait pivoter un graphique ggplot2 à l’horizontale avec coord_flip() — pour des boîtes à moustaches, des diagrammes en barres et des histogrammes — construit un diagramme en barres horizontal classé pour la lisibilité, superposé une version groupée adaptée au daltonisme, et inversé le sens d’un axe avec scale_y_reverse() / scale_x_reverse(). Retenez la distinction : pivoter = orientation, inverser = sens. Apprenez ensuite la grammaire complète des graphiques que vous avez pivotés — le diagramme en barres et la boîte à moustaches.
Vous préférez un livre ? GGPlot2 Essentials 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 ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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.
Cette leçon est reproductible : les figures sont exécutées au moment de la construction (si elles s’affichent, le code fonctionne), et le bac à sable et le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Inverser et pivoter un graphique ggplot2 (coord\_flip)},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/reverse-flip},
langid = {fr}
}