| QQPlot | R Documentation |
Produces a quantile-quantile (QQ) plot or probability-probability (PP) plot to compare the empirical distribution of a numeric variable against a theoretical distribution (default: standard normal). The function delegates to the qqplotr package for the underlying statistics and rendering.
Key features:
QQ and PP modes – switch between quantile-quantile
and probability-probability displays via type.
Confidence bands – overlay one or more confidence bands (pointwise, KS, Tukey simultaneous, or bootstrap) with custom fill colours and alpha.
Reference line – a diagonal reference line (QQ) or diagonal probability line (PP) for comparison.
Distribution fitting – compare against any
distribution supported by qqplotr (normal, exponential, uniform,
etc.) by passing distribution and dparams inside the
band, line, and point lists.
Detrending – enable detrend = TRUE inside the
argument lists to remove the reference line and visualise only
deviations (flat PP plot centred at zero).
Splitting – use split_by to produce separate
QQ/PP plots for different groups, combined into a single layout.
QQPlot(
data,
val,
val_trans = NULL,
type = c("qq", "pp"),
split_by = NULL,
split_by_sep = "_",
band = NULL,
line = list(),
point = list(),
fill_name = "Bands",
band_alpha = 0.5,
theme = "theme_this",
theme_args = list(),
palette = "Spectral",
palcolor = NULL,
palreverse = FALSE,
facet_by = NULL,
facet_scales = "fixed",
facet_ncol = NULL,
facet_nrow = NULL,
facet_byrow = TRUE,
aspect.ratio = 1,
legend.position = waiver(),
legend.direction = "vertical",
title = NULL,
subtitle = NULL,
xlim = NULL,
ylim = NULL,
xlab = ifelse(type == "qq", "Theoretical Quantiles", "Probability Points"),
ylab = ifelse(type == "qq", "Sample Quantiles", "Cumulative Probability"),
combine = TRUE,
nrow = NULL,
ncol = NULL,
byrow = TRUE,
seed = 8525,
axes = NULL,
axis_titles = axes,
guides = NULL,
design = NULL,
...
)
data |
A data frame. |
val |
A character string naming the numeric column whose distribution is compared against the theoretical distribution. |
val_trans |
A transformation function applied to the |
type |
A character string specifying the plot type. Either
|
split_by |
The column(s) to split data by and plot separately. |
split_by_sep |
The separator for multiple split_by columns. See |
band |
A list of arguments passed to |
line |
A list of arguments passed to |
point |
A list of arguments passed to |
fill_name |
A character string for the fill legend title used
when bands are present. Default: |
band_alpha |
A numeric value in |
theme |
A character string or a theme class (i.e. ggplot2::theme_classic) specifying the theme to use. Default is "theme_this". |
theme_args |
A list of arguments to pass to the theme function. |
palette |
A character string specifying the palette to use.
A named list or vector can be used to specify the palettes for different |
palcolor |
A character string specifying the color to use in the palette.
A named list can be used to specify the colors for different |
palreverse |
A logical value indicating whether to reverse the palette. Default is FALSE. |
facet_by |
A character string specifying the column name of the data frame to facet the plot.
Otherwise, the data will be split by |
facet_scales |
Whether to scale the axes of facets. Default is "fixed"
Other options are "free", "free_x", "free_y". See |
facet_ncol |
A numeric value specifying the number of columns in the facet. When facet_by is a single column and facet_wrap is used. |
facet_nrow |
A numeric value specifying the number of rows in the facet. When facet_by is a single column and facet_wrap is used. |
facet_byrow |
A logical value indicating whether to fill the plots by row. Default is TRUE. |
aspect.ratio |
A numeric value specifying the aspect ratio of the plot. |
legend.position |
A character string specifying the position of the legend.
if |
legend.direction |
A character string specifying the direction of the legend. |
title |
A character string specifying the title of the plot. A function can be used to generate the title based on the default title. This is useful when split_by is used and the title needs to be dynamic. |
subtitle |
A character string specifying the subtitle of the plot. |
xlim |
A numeric vector of length 2 specifying the x-axis limits.
Default: |
ylim |
A numeric vector of length 2 specifying the y-axis limits.
Default: |
xlab |
A character string specifying the x-axis label. |
ylab |
A character string specifying the y-axis label. |
combine |
Whether to combine the plots into one when facet is FALSE. Default is TRUE. |
nrow |
A numeric value specifying the number of rows in the facet. |
ncol |
A numeric value specifying the number of columns in the facet. |
byrow |
A logical value indicating whether to fill the plots by row. |
seed |
The random seed to use. Default is 8525. |
axes |
A string specifying how axes should be treated. Passed to
|
axis_titles |
A string specifying how axis titltes should be treated. Passed to
|
guides |
A string specifying how guides should be treated in the layout. Passed to
|
design |
Specification of the location of areas in the layout, passed to |
... |
Additional arguments. |
A ggplot object (single plot), a patchwork object
(combined split plots), or a named list of ggplot objects
(when combine = FALSE), each with height and
width attributes in inches.
When split_by is provided:
Common arg validation –
validate_common_args() checks the seed and
facet_by constraints.
Theme processing – process_theme()
resolves the theme string or function.
split_by column resolution –
check_columns() validates the split_by column(s)
with force_factor = TRUE. Multiple columns are concatenated
with split_by_sep.
Data splitting – the data frame is split by
split_by levels (droplevels applied, level order preserved).
If split_by is NULL, the data is wrapped in a
single-element list with name "...".
Per-split parameter resolution –
check_palette(), check_palcolor(), and
check_legend() resolve per-split palette,
palcolor, legend.position, and
legend.direction.
Dispatch per split – QQPlotAtomic() is
called for each split level. If title is a function, it
receives the split level name and generates a dynamic title;
otherwise the level name is used as the default title.
Combination – results are combined via
combine_plots() (when combine = TRUE) or
returned as a named list (when combine = FALSE).
set.seed(8525)
data <- data.frame(norm = rnorm(100))
# Basic QQ plot with default confidence band
QQPlot(data, val = "norm", band = TRUE)
# Multiple confidence bands with custom fill labels
QQPlot(data, val = "norm", band = list(
list(bandType = "ks", mapping = ggplot2::aes(fill = "KS"), alpha = 0.3),
list(bandType = "ts", mapping = ggplot2::aes(fill = "TS")),
list(bandType = "pointwise", mapping = ggplot2::aes(fill = "Normal")),
list(bandType = "boot", mapping = ggplot2::aes(fill = "Bootstrap"))
), band_alpha = 0.6)
# Compare against exponential distribution
data(airquality, package = "datasets")
di <- "exp"
dp <- list(rate = 2)
QQPlot(airquality, val = "Ozone",
band = list(distribution = di, dparams = dp),
line = list(distribution = di, dparams = dp),
point = list(distribution = di, dparams = dp)
)
# Detrended QQ plot: deviations from the reference line
de <- TRUE
QQPlot(airquality, val = "Ozone",
band = list(distribution = di, dparams = dp, detrend = de),
line = list(distribution = di, dparams = dp, detrend = de),
point = list(distribution = di, dparams = dp, detrend = de)
)
# PP plot (probability-probability)
QQPlot(data, val = "norm", type = "pp", band = TRUE)
# PP plot with shifted/scaled normal distribution
dp <- list(mean = 2, sd = 2)
QQPlot(data, val = "norm", type = "pp",
band = list(dparams = dp),
point = list(dparams = dp))
# PP plot with custom intercept/slope line
QQPlot(data, val = "norm", type = "pp", band = TRUE,
line = list(ab = c(.2, .5)))
# Detrended PP plot with axis limits
di <- "exp"
dp <- list(rate = .022)
de <- TRUE
QQPlot(airquality, val = "Ozone", type = "pp",
band = list(distribution = di, detrend = de, dparams = dp),
line = list(detrend = de),
point = list(distribution = di, detrend = de, dparams = dp),
ylim = c(-.5, .5)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.