Create a Normal QQ Plot
A normal QQ plot compares sample quantiles with theoretical normal quantiles.
R Graphics · QQ Plot
Diagnose normality, heavy tails, skewness, group differences, alternative distributions, and simulated envelopes.
Quantile–quantile plots compare ordered sample values with theoretical or observed quantiles. Shape matters more than isolated points: systematic curvature identifies departures from the reference distribution.
A normal QQ plot compares sample quantiles with theoretical normal quantiles.

Points near the reference line indicate an approximately normal shape, subject to ordinary sampling variation.
x <- rnorm(150)
qqnorm(x, pch = 19, col = "#2563eb")
qqline(x, col = "#dc2626", lwd = 2)Heavy-tailed data depart from the line in opposite directions at both extremes.

The S-shaped pattern indicates more extreme observations than the normal reference predicts.
x <- rt(180, df = 3)
qqnorm(x, pch = 19, col = adjustcolor("#2563eb",.6))
qqline(x, col = "#dc2626", lwd = 2)Skewed distributions create systematic curvature rather than random scatter around the line.

A long upper tail typically bends the largest sample quantiles above the normal reference.
x <- rexp(180)
qqnorm(x, pch = 19, col = "#2563eb")
qqline(x, col = "#dc2626", lwd = 2)A two-sample QQ plot compares the quantiles of two observed distributions.

qqplot() reveals whether samples differ mainly in location, scale, or overall shape.
a <- rnorm(150, 0, 1); b <- rnorm(150, 1, 1.4)
qqplot(a, b, pch = 19, col = "#2563eb",
xlab = "Sample A quantiles", ylab = "Sample B quantiles")
abline(0, 1, col = "#dc2626", lwd = 2)QQ plots can assess distributions other than the normal.

Supply theoretical quantiles from the chosen distribution and compare them with sorted sample values.
x <- rexp(150, rate = .5)
p <- ppoints(length(x))
plot(qexp(p, rate = .5), sort(x), pch = 19, col = "#2563eb",
xlab = "Theoretical exponential quantiles", ylab = "Observed quantiles")
abline(0, 1, col = "#dc2626", lwd = 2)A simulation envelope shows the range of QQ patterns expected from repeated reference samples.

The band helps distinguish meaningful departures from ordinary sample-to-sample variation.
set.seed(42); x <- rnorm(100); p <- ppoints(100); theo <- qnorm(p)
sims <- replicate(200, sort(rnorm(100)))
plot(theo, sort(x), pch = 19, col = "#2563eb")
lines(theo, apply(sims,1,quantile,.025), col = "#94a3b8")
lines(theo, apply(sims,1,quantile,.975), col = "#94a3b8")