
Grouped scatterplots with marginal distributions and statistical results
Source:R/ggscatterstats.R
grouped_ggscatterstats.RdApplies ggscatterstats() across all levels of grouping.var and combines
the resulting plots using combine_plots().
Arguments
- data
A data frame (or a tibble) from which variables specified are to be taken. Other data types (e.g., matrix, table, array, etc.) will not be accepted. Additionally, grouped data frames from
{dplyr}should be ungrouped before they are entered asdata.- ...
Arguments passed on to
ggscatterstatslabel.varVariable to use for point labels entered as a symbol (e.g.
var1).label.expressionAn expression evaluating to a logical vector that determines the subset of data points to label (e.g.
y < 4 & z < 20). While using this argument withpurrr::pmap(), you will have to provide a quoted expression (e.g.quote(y < 4 & z < 20)).point.label.argsA list of additional aesthetic arguments passed to
ggrepel::geom_label_repel(), which displays the point labels.smooth.line.argsA list of additional aesthetic arguments passed to
ggplot2::geom_smooth(), which displays the regression line. Its confidence band usesconf.level.marginalLogical that decides whether marginal distributions are plotted on the axes using
{ggside}(Default:TRUE).point.width.jitter,point.height.jitterAmount of jitter (in data units) in
xandydirection, respectively, passed toggplot2::position_jitter()(Default:0, i.e., no jitter). Do not specify the jitter inpoint.args, because it is shared by the points and their labels.xsidehistogram.args,ysidehistogram.argsA list of arguments passed to
ggside::geom_xsidehistogram()andggside::geom_ysidehistogram(), respectively, to change the marginal histograms.xsidehistogram.scale,ysidehistogram.scaleA list of arguments passed to
ggside::scale_xsidey_continuous()andggside::scale_ysidex_continuous(), respectively, to control the scale of marginal histograms (e.g.,breaks,limits,transform). Default islist()(no modifications).xThe column in
datacontaining the explanatory variable to be plotted on thex-axis.yThe column in
datacontaining the response (outcome) variable to be plotted on they-axis.typeA character specifying the type of statistical approach:
"parametric""nonparametric""robust""bayes"
You can specify just the initial letter (e.g.
"np"or"bf"). Matching is on the initial lowercase letter only, so any other value (including capitalized values such as"Bayes") falls back to"parametric"without a warning.digitsNumber of digits for rounding or significant figures. May also be
"signif"to return significant figures or"scientific"to return scientific notation. Control the number of digits by adding the value as suffix, e.g.digits = "scientific4"to have scientific notation with 4 decimal places, ordigits = "signif5"for 5 significant figures (see alsosignif()).conf.levelScalar between
0and1(default:95%confidence/credible intervals,0.95).trTrim level for the mean when carrying out
robusttests. In case of an error, try reducing the value oftr, which is by default set to0.2. Lowering the value might help.bf.priorA number between
0.5and2(default0.707), the prior width to use in calculating Bayes factors and posterior estimates. In addition to numeric arguments, several named values are also recognized:"medium","wide", and"ultrawide", corresponding to r scale values of1/2,sqrt(2)/2, and1, respectively. In case of an ANOVA, this value corresponds to scale for fixed effects.xlabLabel for
xaxis variable. IfNULL(default), variable name forxwill be used.ylabLabel for
yaxis variable. IfNULL(default), variable name forywill be used.bf.messageLogical that decides whether to display the Bayes Factor in favor of the null hypothesis as a caption. Relevant only for parametric tests (Default:
TRUE).results.subtitleLogical that decides whether the results of statistical tests are displayed as a subtitle (Default:
TRUE). Setting this toFALSEalso skips the automatic Bayes Factor caption. Other plot details have their own arguments.subtitleThe text for the plot subtitle. Used only if
results.subtitle = FALSE.captionThe text for the plot caption. It will be replaced by the Bayes Factor caption whenever that is displayed (see
bf.message).point.argsA list of additional aesthetic arguments passed to
ggplot2::geom_point().ggplot.componentA
{ggplot2}component, or a list of components, to add to the plot (Default:NULL). This is mostly helpful for thegrouped_variants, where it is applied to each individual plot.ggthemeA
{ggplot2}theme (Default:theme_ggstatsplot()). Any{ggplot2}theme (e.g.,ggplot2::theme_bw()) or theme from an extension package (e.g.,ggthemes::theme_fivethirtyeight()) can be used. Note that some themes remove plot details. For example,ggthemes::theme_fivethirtyeight()removes the secondary Y-axis, whichggbetweenstats()uses to show details about pairwise comparisons.
- grouping.var
A single grouping variable. A separate plot is created for each of its levels (in factor level order, or in order of appearance for character variables). Rows with a missing value in this variable are removed.
- plotgrid.args
A
listof additional arguments passed topatchwork::wrap_plots(), except forguides, which has its own argument.- annotation.args
A
listof additional arguments passed topatchwork::plot_annotation().
Value
A patchwork object combining one plot per level of
grouping.var (see combine_plots()). Applying extract_stats() to
it returns a list with the statistical details for each of these plots.
Details
Rows with a missing value in either x or y are removed before
plotting and analysis.
For details, see: https://www.indrapatil.com/ggstatsplot/articles/web_only/ggscatterstats.html
Examples
# for reproducibility
set.seed(123)
library(dplyr, warn.conflicts = FALSE)
library(ggplot2)
grouped_ggscatterstats(
data = filter(movies_long, genre == "Comedy" | genre == "Drama"),
x = length,
y = rating,
type = "robust",
grouping.var = genre,
ggplot.component = list(geom_rug(sides = "b"))
)
# label points matching an expression
grouped_ggscatterstats(
data = filter(ggplot2::mpg, cyl != 5),
x = displ,
y = hwy,
grouping.var = cyl,
type = "robust",
label.var = manufacturer,
label.expression = hwy > 25 & displ > 2.5,
ggplot.component = scale_y_continuous(sec.axis = dup_axis())
)
# label all points
grouped_ggscatterstats(
data = filter(movies_long, rating == 7, genre %in% c("Drama", "Comedy")),
x = budget,
y = length,
grouping.var = genre,
bf.message = FALSE,
label.var = "title",
annotation.args = list(tag_levels = "a")
)