stats (version 3.6.2)

qqnorm: Quantile-Quantile Plots


qqnorm is a generic function the default method of which produces a normal QQ plot of the values in y. qqline adds a line to a “theoretical”, by default normal, quantile-quantile plot which passes through the probs quantiles, by default the first and third quartiles.

qqplot produces a QQ plot of two datasets.

Graphical parameters may be given as arguments to qqnorm, qqplot and qqline.


qqnorm(y, …)
# S3 method for default
qqnorm(y, ylim, main = "Normal Q-Q Plot",
       xlab = "Theoretical Quantiles", ylab = "Sample Quantiles", = TRUE, datax = FALSE, …)

qqline(y, datax = FALSE, distribution = qnorm, probs = c(0.25, 0.75), qtype = 7, …)

qqplot(x, y, = TRUE, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), …)



The first sample for qqplot.


The second or only data sample.

xlab, ylab, main

plot labels. The xlab and ylab refer to the y and x axes respectively if datax = TRUE.

logical. Should the result be plotted?


logical. Should data values be on the x-axis?


quantile function for reference theoretical distribution.


numeric vector of length two, representing probabilities. Corresponding quantile pairs define the line drawn.


the type of quantile computation used in quantile.

ylim, …

graphical parameters.


For qqnorm and qqplot, a list with components


The x coordinates of the points that were/would be plotted


The original y vector, i.e., the corresponding y coordinates including NAs.


Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

See Also

ppoints, used by qqnorm to generate approximations to expected order statistics for a normal distribution.


Run this code

y <- rt(200, df = 5)
qqnorm(y); qqline(y, col = 2)
qqplot(y, rt(300, df = 5))

qqnorm(precip, ylab = "Precipitation [in/yr] for 70 US cities")

## "QQ-Chisquare" : --------------------------
y <- rchisq(500, df = 3)
## Q-Q plot for Chi^2 data against true theoretical distribution:
qqplot(qchisq(ppoints(500), df = 3), y,
       main = expression("Q-Q plot for" ~~ {chi^2}[nu == 3]))
qqline(y, distribution = function(p) qchisq(p, df = 3),
       probs = c(0.1, 0.6), col = 2)
mtext("qqline(*, dist = qchisq(., df=3), prob = c(0.1, 0.6))")
## (Note that the above uses ppoints() with a = 1/2, giving the
## probability points for quantile type 5: so theoretically, using
## qqline(qtype = 5) might be preferable.) 
# }

Run the code above in your browser using DataLab