| add_pvalue | R Documentation |
Add p-values with or without brackets to a ggplot.
See here or the examples section below for examples of how to use.
add_pvalue is a refactored version of
stat_pvalue_manual from
kassambara/ggpubr, altered to
have less dependencies, and more flexibility with input format and
aesthetics. Any examples using stat_pvalue_manual found on
Datanovia
will also work with add_pvalue.
add_pvalue(
data,
label = NULL,
xmin = "group1",
xmax = "group2",
x = NULL,
y.position = "y.position",
parse = FALSE,
label.size = 3.2,
colour = NULL,
color = NULL,
tip.length = 0.03,
bracket.size = 0.6,
bracket.colour = NULL,
bracket.color = NULL,
bracket.shorten = 0,
bracket.nudge.y = 0,
step.increase = 0,
step.group.by = NULL,
remove.bracket = FALSE,
coord.flip = FALSE,
position = "identity",
...
)
data |
A |
label |
|
xmin |
|
xmax |
Optional. |
x |
|
y.position |
|
parse |
|
label.size |
|
colour, color |
|
tip.length |
|
bracket.size |
|
bracket.colour, bracket.color |
|
bracket.shorten |
|
bracket.nudge.y |
|
step.increase |
|
step.group.by |
|
remove.bracket |
|
coord.flip |
|
position |
|
... |
Additional aesthetics or arguments passed to
|
Returns a layer ggproto object with either geom = GeomBracket or
geom = GeomText.
add_pvalue understands the following additional aesthetics or arguments:
fontfacestring. Fontface of text (e.g. "bold").
fontfamilystring. Fontfamily of text (e.g. "Arial").
hjustnumeric. Horizontal justification of text.
vjustnumeric. Vertical justification of text.
alphanumeric. Transparency of text and/or brackets.
linetypestring or numeric. Linetype of brackets
(e.g. "dashed").
lineendstring. Lineend of brackets (e.g. "butt").
na.rmlogical. If FALSE (default), removes
missing values with a warning. If TRUE silently removes missing
values.
show.legendlogical. Should this layer be included in
the legends? If NA (default), include if any aesthetics are mapped.
If FALSE, never include or if TRUE, always include. It can
also be a named logical vector to finely select the aesthetics to
display.
inherit.aeslogical. If FALSE, overrides the
default aesthetics, rather than combining with them.
library(ggplot2)
## we will use the ToothGrowth dataset for all examples
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)
tg$group <- factor(rep(c("grp1", "grp2"), 30))
## p-value bracket comparing two means
# p-value table (its best to use these column names)
two.means <- tibble::tribble(
~group1, ~group2, ~p, ~y.position,
"OJ", "VC", 0.0606, 36
)
# boxplot (or another geom...)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means)
# if your table has special column names you will need to specify them
two.means <- tibble::tribble(
~apple, ~banana, ~my.pval, ~some.y.position,
"OJ", "VC", 0.0606, 36
)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(
two.means,
xmin = "apple",
xmax = "banana",
label = "my.pval",
y.position = "some.y.position"
)
## you can make the label a glue expression
two.means <- tibble::tribble(
~group1, ~group2, ~p, ~y.position,
"OJ", "VC", 0.0606, 36
)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means, label = "p = {p}")
## you can change aesthetics of the bracket and label
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(
two.means,
label = "p = {p}",
colour = "red", # label
label.size = 6, # label
fontface = "bold", # label
fontfamily = "serif", # label
angle = 45, # label
bracket.colour = "blue", # bracket
bracket.size = 1, # bracket
linetype = "dashed", # bracket
lineend = "round" # bracket
)
## you can change the tip length of the bracket
# make them longer
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means, tip.length = 0.1)
# make them disappear
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means, tip.length = 0)
# make one side longer than the other
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means, tip.length = c(0.1, 0))
## p-value brackets with comparisons to a reference sample
each.vs.ref <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position,
"0.5", "1", 8.80e-14, 35,
"0.5", "2", 1.27e-7, 38
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(each.vs.ref)
## p-value brackets with pairwise comparisons
pairwise <- tibble::tribble(
~group1, ~group2, ~p.signif, ~y.position,
"0.5", "1", "****", 38,
"0.5", "2", "****", 36,
"1", "2", "****", 38
)
# you can shorten the length of brackets that are close together
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(
pairwise,
bracket.shorten = c(0.05, 0, 0.05)
)
# you can nudge brackets that are not quite in the correct y position
# instead of changing the p-value table
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(
pairwise,
bracket.shorten = c(0.05, 0, 0.05),
bracket.nudge.y = c(0.5, 0, 0.5)
)
## p-value brackets with pairwise comparisons of grouped data
pairwise.grouped <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position, ~supp,
"0.5", "1", 2.63e-4, 33.5, "OJ",
"0.5", "2", 3.96e-6, 37.6, "OJ",
"1", "2", 1.18e-1, 41.6, "OJ",
"0.5", "1", 2.04e-6, 36.5, "VC",
"0.5", "2", 1.40e-7, 40.6, "VC",
"1", "2", 2.75e-4, 44.6, "VC"
)
# use step.increase to change the spacing between different brackets in the
# groups specified by step.group.by
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = supp)) +
add_pvalue(
pairwise.grouped,
colour = "supp",
tip.length = 0,
step.group.by = "supp",
step.increase = 0.03
)
## p-value (brackets) with single facet variable
two.means.grouped1 <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position, ~dose,
"OJ", "VC", 0.0127, 24, "0.5",
"OJ", "VC", 0.00312, 30, "1",
"OJ", "VC", 0.964, 36.5, "2"
)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
facet_wrap(~ dose, scales = "free") +
add_pvalue(two.means.grouped1) # table must have dose column
## p-value (brackets) with single facet variable and multiple brackets per facet
pairwise.grouped <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position, ~supp,
"0.5", "1", 2.63e-4, 33.5, "OJ",
"0.5", "2", 3.96e-6, 37.6, "OJ",
"1", "2", 1.18e-1, 41.6, "OJ",
"0.5", "1", 2.04e-6, 36.5, "VC",
"0.5", "2", 1.40e-7, 40.6, "VC",
"1", "2", 2.75e-4, 44.6, "VC"
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = supp)) +
facet_wrap(~ supp) +
add_pvalue(pairwise.grouped)
## p-value (brackets) with two facet variables
two.means.grouped2 <- tibble::tribble(
~group1, ~group2, ~p.signif, ~y.position, ~group, ~dose,
"OJ", "VC", "*", 21, "grp1", "0.5",
"OJ", "VC", "**", 30, "grp2", "1"
)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
facet_wrap(group ~ dose) +
add_pvalue(two.means.grouped2) # table must have dose and group column
## p-value (text only) comparing two means
two.means <- tibble::tribble(
~group1, ~group2, ~p, ~y.position,
"OJ", "VC", 0.0606, 36
)
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(two.means, remove.bracket = TRUE, x = 1.5)
## p-value (text only) with coord_flip, override y.position, change angle
ggplot(tg, aes(x = supp, y = len)) +
geom_boxplot() +
add_pvalue(
two.means,
remove.bracket = TRUE,
x = 1.5,
y.position = 32,
angle = 45
) +
coord_flip()
## p-value (text only) comparing to the null
one.mean <- tibble::tribble(
~group1, ~group2, ~p.signif, ~y.position, ~dose,
"1", "null model", "****", 35, "0.5",
"1", "null model", "****", 35, "1",
"1", "null model", "****", 35, "2"
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(one.mean, x = "dose")
## p-value (text only) with comparisons to a base mean
each.vs.basemean <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position,
"all", "0.5", "****", 35,
"all", "1", "ns", 35,
"all", "2", "****", 35
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(each.vs.basemean)
## p-value (text only) with comparison to reference sample
each.vs.ref <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position,
"0.5", "1", 8.80e-14, 35,
"0.5", "2", 1.27e-7, 38
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = dose)) +
add_pvalue(each.vs.ref, coord.flip = TRUE, remove.bracket = TRUE)
## p-value (text only) with a grouping variable
two.means.grouped1 <- tibble::tribble(
~group1, ~group2, ~p.adj, ~y.position, ~dose,
"OJ", "VC", 0.0127, 24, "0.5",
"OJ", "VC", 0.00312, 30, "1",
"OJ", "VC", 0.964, 36.5, "2"
)
ggplot(tg, aes(x = dose, y = len)) +
geom_boxplot(aes(fill = supp)) +
add_pvalue(two.means.grouped1, x = "dose")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.