set.seed(123)
normal_sample <- rnorm(100) # 100 draws from a normal distribution
qqnorm(normal_sample, pch = 1, frame = FALSE)
qqline(normal_sample, col = "#3a86d4", lwd = 2)
Tracez un diagramme quantile-quantile en R de base et lisez-le pour juger si vos données sont normales
Réalisez un diagramme quantile-quantile (Q-Q) en R pour vérifier la normalité. Utilisez qqnorm() et qqline() pour un Q-Q plot normal, qqplot() pour comparer deux échantillons, apprenez à lire les courbes et les formes en S (asymétrie et queues lourdes), et tracez un graphique prêt à publier avec une bande de confiance grâce à ggpubr::ggqqplot().
27 juin 2026
7 juillet 2026
qqnorm() trace le graphique et qqline() ajoute la droite de référence à 45 degrés. Des points proches de la droite ⇒ approximativement normaux.qqplot(x, y) compare deux échantillons entre eux plutôt qu’à la distribution normale.ggpubr::ggqqplot() — les points à l’intérieur de la bande sont jugés « assez proches ».« Mes données sont-elles normales ? » Vous pouvez fixer un histogramme, ou lancer un test de Shapiro-Wilk et obtenir une unique p-value — mais un Q-Q plot le montre d’un coup d’œil. Il trace les quantiles de votre échantillon en regard des quantiles attendus d’une distribution normale. Si les deux concordent, les points tombent sur une droite ; là où ils s’écartent de la droite, vous voyez exactement comment les données s’éloignent de la normale — une asymétrie, une queue lourde, une valeur aberrante.
Cette leçon reste en R de base pour la recette de base — qqnorm() et qqline() n’ont besoin d’aucun package — puis montre le moderne ggpubr::ggqqplot() pour une version soignée dotée d’une bande de confiance. Vous tracerez le graphique, apprendrez à le lire, et saurez ce qu’une courbe ou une forme en S vous indique.
Vous travaillez avec la grammaire des graphiques ? Consultez la leçon Q-Q plot ggplot2/ggpubr pour la voie stat_qq().
Deux fonctions font tout le travail. qqnorm() trace les points ; qqline() ajoute la droite de référence à laquelle vous les comparez.

L’axe des x représente les quantiles théoriques (ce que prédit une distribution normale) ; l’axe des y représente vos quantiles d’échantillon (ce que vous avez réellement). qqline() trace une droite passant par le premier et le troisième quartile. Comme les points tombent près de cette droite, cet échantillon est cohérent avec une distribution normale — exactement ce que nous espérions, puisque nous l’avons tiré de rnorm().
pch = 1 utilise des cercles ouverts ; frame = FALSE supprime le cadre autour du graphique pour un rendu plus net.
Les deux mêmes appels fonctionnent sur n’importe quel vecteur numérique. Voici la colonne len (longueur des dents) du jeu de données intégré ToothGrowth.
Les points suivent bien la droite au centre, avec seulement un léger flottement aux extrémités. Pour un échantillon de cette taille, c’est une base raisonnable pour supposer la normalité — le verdict habituel avant un t-test ou une ANOVA.
qqnorm() compare toujours à la distribution normale. Pour comparer deux échantillons entre eux — partagent-ils la même forme de distribution ? — utilisez qqplot(x, y). Il trace les quantiles de x en regard des quantiles de y ; si les deux distributions ont la même forme, les points tombent sur une droite.

Les deux échantillons proviennent de la même distribution normale, donc les points se placent sur la droite à 45 degrés en pointillés. Donnez à qqplot() deux distributions véritablement différentes et les points s’incurveront en s’en éloignant. C’est l’outil pour « ces deux groupes ressemblent-ils au même type de données ? ».
Une simple droite de référence laisse place à un jugement : à quel point un écart à la droite est-il trop grand ? Une bande de confiance y répond — les points à l’intérieur de la bande relèvent de la variation d’échantillonnage normale. R de base n’en trace pas d’office, mais la fonction qqPlot() du package car ajoute une bande, et ggpubr::ggqqplot() (section suivante) la trace par défaut. Lorsque vous disposez d’une bande, la règle est simple : points à l’intérieur de la bande ⇒ assez proches de la normale.
Pour un Q-Q plot prêt à publier avec la bande de confiance intégrée, ggpubr::ggqqplot() le fait en un seul appel. Il trace les points, la droite de référence et une bande de confiance à 95 % ombrée — et renvoie un objet ggplot que vous pouvez thématiser ou facetter.

Passez un data frame et le nom de la colonne sous forme de chaîne (x = "len"). Les points qui tombent à l’intérieur de la bande grise sont cohérents avec la normalité. Ajoutez facet.by = "supp" pour tracer un panneau par groupe, ou color = une colonne de groupement pour colorer les points — pratique lorsque vous devez vérifier la normalité au sein de chaque groupe avant un test groupé.
Pour la voie complète stat_qq() / stat_qq_line() et davantage de styles ggplot2, consultez la leçon Q-Q plot ggplot2/ggpubr.
Modifiez les données ou remplacez ggqqplot() par qqnorm() + qqline() puis appuyez sur Run — cela s’exécute dans votre navigateur via webR, sans installation.
Demandez à Prova « mon Q-Q plot s’incurve vers le haut en haut à droite — qu’est-ce que cela signifie ? » — elle répond avec du code R que vous pouvez exécuter sur vos propres données, de sorte que le diagnostic est reproductible. The runtime is the judge. Demander à Prova →
Les points se courbent ou forment un S — est-ce mauvais ? Pas nécessairement « mauvais », mais cela vous indique que les données ne sont pas normales. Une courbure à une extrémité signifie une asymétrie (vers le haut en haut à droite = asymétrie à droite) ; les deux extrémités qui s’écartent (un S) signifient des queues lourdes. Un léger flottement tout aux extrémités n’est que du bruit d’échantillonnage — jugez la tendance globale. Si la normalité est réellement violée, passez à un test non paramétrique (Wilcoxon, Kruskal-Wallis) ou transformez les données.
ggqqplot() provoque une erreur ou ne trace rien. ggpubr::ggqqplot() prend soit un simple vecteur numérique (ggqqplot(x)), soit un data frame avec le nom de la colonne sous forme de chaîne (ggqqplot(df, x = "len")) — et non df$len comme premier argument. Mélanger les deux formes est la cause habituelle. Et chargez d’abord le package avec library(ggpubr).
Tracez un Q-Q plot avec qqnorm(x) puis qqline(x) — si les points tombent le long de la droite, les données sont approximativement normales. Pour un test numérique en complément, utilisez shapiro.test(x) (une p-value supérieure à 0.05 signifie aucune preuve contre la normalité). Le Q-Q plot est généralement le plus instructif des deux car il montre comment les données s’écartent.
qqnorm(x) compare un échantillon à la distribution normale (une vérification de normalité). qqplot(x, y) compare deux échantillons entre eux — il demande s’ils partagent la même forme de distribution, pas si l’un ou l’autre est normal.
Les points tombent près d’une droite, du bas à gauche vers le haut à droite, avec seulement un léger flottement aux deux extrémités. Cela signifie que les quantiles d’échantillon correspondent aux quantiles théoriques (normaux), donc les données sont cohérentes avec une distribution normale.
Une courbe à une extrémité signale une asymétrie (courbure vers le haut en haut à droite = asymétrie à droite, vers le bas en bas à gauche = asymétrie à gauche). Une forme en S, ou les deux extrémités qui s’éloignent de la droite, signale des queues lourdes — plus de valeurs extrêmes qu’une distribution normale n’en produirait.
qqnorm() de base n’en trace pas. Utilisez ggpubr::ggqqplot(df, x = "col"), qui ombre une bande de confiance à 95 % par défaut, ou car::qqPlot(x). Les points à l’intérieur de la bande relèvent de la variation d’échantillonnage normale.
Voici un échantillon tiré d’une distribution exponentielle (qui est asymétrique à droite). Tracez son Q-Q plot normal avec qqnorm() et ajoutez une droite de référence bleu acier avec qqline(). Puis regardez la forme : quelle extrémité s’écarte de la droite ?
Appelez d’abord qqnorm(my_data) pour tracer les points, puis qqline(my_data, col = "#3a86d4", lwd = 2) pour la droite de référence. Regardez l’extrémité en haut à droite du nuage de points.
Les points se courbent vers le haut en s’écartant de la droite en haut à droite — la signature de l’asymétrie à droite. Ces données ne sont pas normales ; une transformation ou un test non paramétrique serait la prochaine étape.
Vérification rapide. Vous voulez comparer si deux échantillons, x et y, partagent la même forme de distribution. Quelle fonction utilisez-vous ?
qqplot(x, y). Utilisez qqnorm() pour comparer un échantillon à la distribution normale ; utilisez qqplot() pour comparer deux échantillons entre eux.
Un Q-Q plot est le moyen le plus rapide de juger la normalité à l’œil. En R de base, qqnorm() plus qqline() est tout ce dont vous avez besoin ; lisez la forme — des points sur la droite signifient normal, une extrémité courbée signifie une asymétrie, un S signifie des queues lourdes. Utilisez qqplot(x, y) pour comparer deux échantillons, et tournez-vous vers ggpubr::ggqqplot() lorsque vous voulez une bande de confiance et une figure prête à publier.
stat_qq() et ggqqplot(). · Histogramme en R — l’autre manière classique d’examiner la forme d’une distribution.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 : chaque figure a été produite par le code montré, exécuté au moment de la compilation (s’ils s’affichent, le code fonctionne), et le bac à sable se ré-exécute en direct dans votre navigateur. Modifiez n’importe quel bloc et Run. The runtime is the judge.
@online{2026,
author = {},
title = {QQ plot en R : qqnorm(), qqline() et le test de normalité},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/qq-plots-in-r},
langid = {fr}
}
Comment lire un Q-Q plot
Tout l’intérêt d’un Q-Q plot réside dans la forme de l’écart. Trois motifs couvrent presque tout ce que vous verrez. Le graphique ci-dessous place un échantillon normal à côté d’un échantillon asymétrique à droite pour que vous puissiez comparer.
Lisez-le ainsi :
Une poignée de points hors de la droite tout aux extrémités relève du bruit d’échantillonnage normal — jugez la tendance globale, pas les points individuels.