Distribution + interval plots (eye plots, half-eye plots, CCDF barplots, etc) for analytical distributions (ggplot stat)
Stats for computing distribution functions (densities or CDFs) + intervals for use with
geom_slabinterval(). Uses the dist aesthetic to specify a distribution using
objects from the distributional package,
or using distribution names and arg1, ... arg9 aesthetics (or args as a list column)
to specify distribution arguments. See Details.
stat_dist_slabinterval(
mapping = NULL,
data = NULL,
geom = "slabinterval",
position = "identity",
...,
slab_type = c("pdf", "cdf", "ccdf"),
p_limits = c(NA, NA),
orientation = NA,
limits = NULL,
n = 501,
.width = c(0.66, 0.95),
show_slab = TRUE,
show_interval = TRUE,
na.rm = FALSE,
show.legend = c(size = FALSE),
inherit.aes = TRUE
)
stat_dist_halfeye(...)
stat_dist_eye(..., side = "both")
stat_dist_ccdfinterval(
...,
slab_type = "ccdf",
justification = 0.5,
side = "topleft",
normalize = "none"
)
stat_dist_cdfinterval(
...,
slab_type = "cdf",
justification = 0.5,
side = "topleft",
normalize = "none"
)
stat_dist_gradientinterval(
mapping = NULL,
data = NULL,
geom = "slabinterval",
position = "identity",
...,
justification = 0.5,
thickness = 1,
show.legend = c(size = FALSE, slab_alpha = FALSE),
inherit.aes = TRUE
)
stat_dist_pointinterval(..., show_slab = FALSE)
stat_dist_interval(
mapping = NULL,
data = NULL,
geom = "interval",
position = "identity",
...,
show_slab = FALSE,
show_point = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
stat_dist_slab(
mapping = NULL,
data = NULL,
geom = "slab",
position = "identity",
...,
show.legend = NA,
inherit.aes = TRUE
)mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
geom |
Use to override the default connection between
|
position |
Position adjustment, either as a string, or the result of a call to a position adjustment function. |
... |
Other arguments passed to |
slab_type |
The type of slab function to calculate: probability density (or mass) function ( |
p_limits |
Probability limits (as a vector of size 2) used to determine the lower and upper
limits of the slab. E.g., if this is |
orientation |
Whether this geom is drawn horizontally ( |
limits |
Manually-specified limits for the slab, as a vector of length two. These limits are combined with those
computed based on |
n |
Number of points at which to evaluate |
.width |
The |
show_slab |
Should the slab portion of the geom be drawn? Default |
show_interval |
Should the interval portion of the geom be drawn? Default |
na.rm |
If |
show.legend |
Should this layer be included in the legends? Default is |
inherit.aes |
If |
side |
Which side to draw the slab on. |
justification |
Justification of the interval relative to the slab, where |
normalize |
How to normalize heights of functions input to the |
thickness |
Override for the |
show_point |
Should the point portion of the geom be drawn? Default |
A highly configurable stat for generating a variety of plots that combine a "slab" that describes a distribution plus an interval. Several "shortcut" stats are provided which combine multiple options to create useful geoms, particularly eye plots (a combination of a violin plot and interval), half-eye plots (a density plus interval), and CCDF bar plots (a complementary CDF plus interval).
The shortcut stat names follow the pattern stat_dist_[name].
Stats include:
stat_dist_eye: Eye plots (violin + interval)
stat_dist_halfeye: Half-eye plots (density + interval)
stat_dist_ccdfinterval: CCDF bar plots (CCDF + interval)
stat_dist_cdfinterval: CDF bar plots (CDF + interval)
stat_dist_gradientinterval: Density gradient + interval plots
stat_dist_pointinterval: Point + interval plots
stat_dist_interval: Interval plots
These stats expect a dist aesthetic to specify a distribution. This aesthetic
can be used in one of two ways:
dist can be any distribution object from the distributional
package, such as dist_normal(), dist_beta(), etc. Since these functions are vectorized,
other columns can be passed directly to them in an aes() specification; e.g.
aes(dist = dist_normal(mu, sigma)) will work if mu and sigma are columns in the
input data frame.
dist can be a character vector giving the distribution name. Then the arg1, ... arg9
aesthetics (or args as a list column) specify distribution arguments. Distribution names
should correspond to R functions that have "p", "q", and "d" functions; e.g. "norm"
is a valid distribution name because R defines the pnorm(), qnorm(), and dnorm()
functions for Normal distributions.
See the parse_dist() function for a useful way to generate dist and args
values from human-readable distribution specs (like "normal(0,1)"). Such specs are also
produced by other packages (like the brms::get_prior function in brms); thus,
parse_dist() combined with the stats described here can help you visualize the output
of those functions.
A ggplot2::Stat representing a slab or combined slab+interval geometry which can
be added to a ggplot() object.
These stats support the following aesthetics:
dist
args
arg1
arg2
arg3
arg4
arg5
arg6
arg7
arg8
arg9
x
y
datatype
thickness
size
group
In addition, in their default configuration (paired with geom_slabinterval()) the following aesthetics are supported by the underlying geom:
x
y
datatype
alpha
colour
colour_ramp
linetype
fill
shape
stroke
point_colour
point_fill
point_alpha
point_size
size
interval_colour
interval_alpha
interval_size
interval_linetype
slab_size
slab_colour
slab_fill
slab_alpha
slab_linetype
fill_ramp
ymin
ymax
xmin
xmax
width
height
thickness
group
See examples of some of these aesthetics in action in vignette("slabinterval").
Learn more about the sub-geom aesthetics (like interval_color) in the scales documentation.
Learn more about basic ggplot aesthetics in vignette("ggplot2-specs").
x or y: For slabs, the input values to the slab function.
For intervals, the point summary from the interval function. Whether it is x or y depends on orientation
xmin or ymin: For intervals, the lower end of the interval from the interval function.
xmax or ymax: For intervals, the upper end of the interval from the interval function.
f: For slabs, the output values from the slab function (such as the PDF, CDF, or CCDF),
determined by slab_type.
pdf: For slabs, the probability density function.
cdf: For slabs, the cumulative distribution function.
See geom_slabinterval() for more information on the geom these stats
use by default and some of the options they have. See stat_sample_slabinterval()
for the versions of these stats that can be used on samples.
See vignette("slabinterval") for a variety of examples of use.
library(dplyr)
library(ggplot2)
library(distributional)
theme_set(theme_ggdist())
dist_df = tribble(
~group, ~subgroup, ~mean, ~sd,
"a", "h", 5, 1,
"b", "h", 7, 1.5,
"c", "h", 8, 1,
"c", "i", 9, 1,
"c", "j", 7, 1
)
dist_df %>%
ggplot(aes(x = group, dist = "norm", arg1 = mean, arg2 = sd, fill = subgroup)) +
stat_dist_eye(position = "dodge")
# Using functions from the distributional package (like dist_normal()) with the
# dist aesthetic can lead to more compact/expressive specifications
dist_df %>%
ggplot(aes(x = group, dist = dist_normal(mean, sd), fill = subgroup)) +
stat_dist_eye(position = "dodge")
# the stat_dist_... family applies a Jacobian adjustment to densities
# when plotting on transformed scales in order to plot them correctly.
# For example, here is a log-Normal distribution plotted on the log
# scale, where it will appear Normal:
data.frame(dist = "lnorm") %>%
ggplot(aes(y = 1, dist = dist, arg1 = log(10), arg2 = 2*log(10))) +
stat_dist_halfeye() +
scale_x_log10(breaks = 10^seq(-5,7, by = 2))
# see vignette("slabinterval") for many more examples.Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.