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.