R/stat_dist_slabinterval.R
stat_dist_slabinterval.RdStats 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(0.001, 0.999), 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 ggplot2::Stat representing a slab or combined slab+interval geometry which can
be added to a ggplot() object.
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.
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
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
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.
#> Warning: package 'distributional' was built under R version 4.0.3dist_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.