R/stat_dist_slabinterval.R
stat_dist_slabinterval.Rd
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(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  Manuallyspecified 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), halfeye 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
: Halfeye 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 humanreadable 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 subgeom aesthetics (like interval_color
) in the scales documentation.
Learn more about basic ggplot aesthetics in vignette("ggplot2specs")
.
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) 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 logNormal 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.