Inverser et pivoter un graphique ggplot2 (coord_flip)

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.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstuceL’essentiel à retenir
  • 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.
  • Il fonctionne sur n’importe quel geom : ajoutez-le à un diagramme en barres, à une boîte à moustaches ou à un histogramme sans changer le reste du code.
  • Un diagramme en barres horizontal en est l’usage le plus précieux : des catégories classées portant des noms longs se parcourent bien plus facilement de côté.
  • 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().
  • Pivoter ou inverser — ce sont deux questions différentes : pivoter change l’orientation, inverser change le sens dans lequel les valeurs progressent.
  • Chaque graphique ci-dessous est rendu pour vous — modifiez ensuite n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

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.

Faire pivoter un graphique à l’horizontale avec coord_flip()

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.

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

Horizontal ggplot2 box plot of tooth length by vitamin C dose; doses run down the side, length left to right.

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.

Diagramme en barres horizontal

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

Horizontal ggplot2 bar chart of mean tooth length by dose; three azure bars run left to right.

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.

Barres horizontales classées : pourquoi pivoter

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

Horizontal ggplot2 bar chart of mean tooth length by dose-and-supplement combination, bars ordered shortest to longest.

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

Barres groupées horizontales en couleur

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

Horizontal ggplot2 grouped bar chart of mean tooth length by dose, with orange-juice and ascorbic-acid bars in colourblind-safe viridis colours.

Histogramme horizontal

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.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(binwidth = 4, fill = "#3a86d4", colour = "white") +
  coord_flip() +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

Horizontal ggplot2 histogram of tooth length; azure bars grow left to right with length on the vertical axis.

Inverser le sens de l’axe y avec scale_y_reverse()

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

library(ggplot2)
ggplot(faithful, aes(x = waiting)) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", colour = "white") +
  scale_y_reverse() +
  labs(x = "Waiting time (min)", y = "Count (reversed)") +
  theme_minimal()

ggplot2 histogram of Old Faithful waiting times with the count axis reversed so bars hang from the top.

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.

Inverser le sens de l’axe x avec scale_x_reverse()

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.

library(ggplot2)
ggplot(faithful, aes(x = waiting)) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", colour = "white") +
  scale_x_reverse() +
  labs(x = "Waiting time (min, reversed)", y = "Count") +
  theme_minimal()

ggplot2 histogram of Old Faithful waiting times with the x-axis reversed so high values sit on the left.

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.

Essayez en direct

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.

🟢 Avec un agent IA

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 →

Questions fréquentes

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.

Testez vos connaissances

Complétez le code pour que le diagramme en barres soit pivoté à l’horizontale.

# Add coord_flip() as the next layer to swap the x and y axes.
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()
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()

Conclusion

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.

Leçons connexes

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.

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 ggplot2 — 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
Note

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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Inverser et pivoter un graphique ggplot2 (coord_flip).” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/reverse-flip.