Box plot or violin plot with optional jitter points, trend line, statistical test, background, line, and highlight.
Usage
BoxPlot(
data,
x,
x_sep = "_",
y = NULL,
in_form = c("long", "wide"),
split_by = NULL,
split_by_sep = "_",
sort_x = c("none", "mean_asc", "mean_desc", "mean", "median_asc", "median_desc",
"median"),
flip = FALSE,
keep_empty = FALSE,
group_by = NULL,
group_by_sep = "_",
group_name = NULL,
x_text_angle = ifelse(isTRUE(flip) && isTRUE(stack), 90, 45),
fill_mode = ifelse(!is.null(group_by), "dodge", "x"),
fill_reverse = FALSE,
theme = "theme_this",
theme_args = list(),
palette = "Paired",
palcolor = NULL,
alpha = 1,
aspect.ratio = NULL,
legend.position = "right",
legend.direction = "vertical",
add_point = FALSE,
pt_color = "grey30",
pt_size = NULL,
pt_alpha = 1,
jitter_width = 0.5,
jitter_height = 0.1,
stack = FALSE,
y_max = NULL,
y_min = NULL,
add_trend = FALSE,
trend_color = NULL,
trend_linewidth = 1,
trend_ptsize = 2,
add_stat = NULL,
stat_name = NULL,
stat_color = "black",
stat_size = 1,
stat_stroke = 1,
stat_shape = 25,
add_bg = FALSE,
bg_palette = "stripe",
bg_palcolor = NULL,
bg_alpha = 0.2,
add_line = NULL,
line_color = "red2",
line_width = 0.6,
line_type = 2,
highlight = NULL,
highlight_color = "red2",
highlight_size = 1,
highlight_alpha = 1,
comparisons = NULL,
ref_group = NULL,
pairwise_method = "wilcox.test",
multiplegroup_comparisons = FALSE,
multiple_method = "kruskal.test",
sig_label = "p.format",
sig_labelsize = 3.5,
hide_ns = FALSE,
facet_by = NULL,
facet_scales = "fixed",
facet_ncol = NULL,
facet_nrow = NULL,
facet_byrow = TRUE,
title = NULL,
subtitle = NULL,
xlab = NULL,
ylab = NULL,
seed = 8525,
combine = TRUE,
nrow = NULL,
ncol = NULL,
byrow = TRUE,
axes = NULL,
axis_titles = axes,
guides = NULL,
...
)
ViolinPlot(
data,
x,
x_sep = "_",
y = NULL,
in_form = c("long", "wide"),
split_by = NULL,
split_by_sep = "_",
sort_x = c("none", "mean_asc", "mean_desc", "mean", "median_asc", "median_desc",
"median"),
flip = FALSE,
keep_empty = FALSE,
group_by = NULL,
group_by_sep = "_",
group_name = NULL,
x_text_angle = ifelse(isTRUE(flip) && isTRUE(stack), 90, 45),
fill_mode = ifelse(!is.null(group_by), "dodge", "x"),
fill_reverse = FALSE,
theme = "theme_this",
theme_args = list(),
palette = "Paired",
palcolor = NULL,
alpha = 1,
aspect.ratio = NULL,
legend.position = "right",
legend.direction = "vertical",
add_point = FALSE,
pt_color = "grey30",
pt_size = NULL,
pt_alpha = 1,
jitter_width = 0.5,
jitter_height = 0.1,
stack = FALSE,
y_max = NULL,
y_min = NULL,
add_box = FALSE,
box_color = "black",
box_width = 0.1,
box_ptsize = 2.5,
add_trend = FALSE,
trend_color = NULL,
trend_linewidth = 1,
trend_ptsize = 2,
add_stat = NULL,
stat_name = NULL,
stat_color = "black",
stat_size = 1,
stat_stroke = 1,
stat_shape = 25,
add_bg = FALSE,
bg_palette = "stripe",
bg_palcolor = NULL,
bg_alpha = 0.2,
add_line = NULL,
line_color = "red2",
line_width = 0.6,
line_type = 2,
highlight = NULL,
highlight_color = "red2",
highlight_size = 1,
highlight_alpha = 1,
comparisons = NULL,
ref_group = NULL,
pairwise_method = "wilcox.test",
multiplegroup_comparisons = FALSE,
multiple_method = "kruskal.test",
sig_label = "p.format",
sig_labelsize = 3.5,
hide_ns = FALSE,
facet_by = NULL,
facet_scales = "fixed",
facet_ncol = NULL,
facet_nrow = NULL,
facet_byrow = TRUE,
title = NULL,
subtitle = NULL,
xlab = NULL,
ylab = NULL,
seed = 8525,
combine = TRUE,
nrow = NULL,
ncol = NULL,
byrow = TRUE,
axes = NULL,
axis_titles = axes,
guides = NULL,
...
)
Arguments
- data
A data frame.
- x
A character string specifying the column name of the data frame to plot for the x-axis.
- x_sep
A character string to concatenate the columns in
x
, if multiple columns are provided. Whenin_form
is "wide",x
columns will not be concatenated.- y
A character string specifying the column name of the data frame to plot for the y-axis.
- in_form
A character string to specify the input data type. Either "long" or "wide".
- split_by
The column(s) to split data by and plot separately.
- split_by_sep
The separator for multiple split_by columns. See
split_by
- sort_x
A character string to specify the sorting of x-axis. Either "none", "mean_asc", "mean_desc", "mean", "median_asc", "median_desc", "median".
- flip
A logical value to flip the plot.
- keep_empty
A logical value indicating whether to keep empty groups. If FALSE, empty groups will be removed.
- group_by
Columns to group the data for plotting For those plotting functions that do not support multiple groups, They will be concatenated into one column, using
group_by_sep
as the separator- group_by_sep
The separator for multiple group_by columns. See
group_by
- group_name
A character string to name the legend of dodge.
- x_text_angle
A numeric value specifying the angle of the x-axis text.
- fill_mode
A character string to specify the fill mode. Either "dodge", "x", "mean", "median".
- fill_reverse
A logical value to reverse the fill colors for gradient fill (mean/median).
- theme
A character string or a theme class (i.e. ggplot2::theme_classic) specifying the theme to use. Default is "theme_this".
- theme_args
A list of arguments to pass to the theme function.
- palette
A character string specifying the palette to use. A named list or vector can be used to specify the palettes for different
split_by
values.- palcolor
A character string specifying the color to use in the palette. A named list can be used to specify the colors for different
split_by
values. If some values are missing, the values from the palette will be used (palcolor will be NULL for those values).- alpha
A numeric value specifying the transparency of the plot.
- aspect.ratio
A numeric value specifying the aspect ratio of the plot.
- legend.position
A character string specifying the position of the legend. if
waiver()
, for single groups, the legend will be "none", otherwise "right".- legend.direction
A character string specifying the direction of the legend.
- add_point
A logical value to add (jitter) points to the plot.
- pt_color
A character string to specify the color of the points.
- pt_size
A numeric value to specify the size of the points.
- pt_alpha
A numeric value to specify the transparency of the points.
- jitter_width
A numeric value to specify the width of the jitter.
- jitter_height
A numeric value to specify the height of the jitter.
- stack
A logical value whether to stack the facetted plot by 'facet_by'.
- y_max
A numeric value or a character string to specify the maximum value of the y-axis.
- y_min
A numeric value or a character string to specify the minimum value of the y-axis.
- add_trend
A logical value to add trend line to the plot.
- trend_color
A character string to specify the color of the trend line.
- trend_linewidth
A numeric value to specify the width of the trend line.
- trend_ptsize
A numeric value to specify the size of the trend line points.
- add_stat
A character string to add statistical test to the plot.
- stat_name
A character string to specify the name of the stat legend.
- stat_color
A character string to specify the color of the statistical test.
- stat_size
A numeric value to specify the size of the statistical test.
- stat_stroke
A numeric value to specify the stroke of the statistical test.
- stat_shape
A numeric value to specify the shape of the statistical test.
- add_bg
A logical value to add background to the plot.
- bg_palette
A character string to specify the palette of the background.
- bg_palcolor
A character vector to specify the colors of the background.
- bg_alpha
A numeric value to specify the transparency of the background.
- add_line
A character string to add a line to the plot.
- line_color
A character string to specify the color of the line.
- line_width
A numeric value to specify the size of the line.
- line_type
A numeric value to specify the type of the line.
- highlight
A vector of character strings to highlight the points. It should be a subset of the row names of the data. If TRUE, it will highlight all points.
- highlight_color
A character string to specify the color of the highlighted points.
- highlight_size
A numeric value to specify the size of the highlighted points.
- highlight_alpha
A numeric value to specify the transparency of the highlighted points.
- comparisons
A logical value or a list of vectors to perform pairwise comparisons. If
TRUE
, it will perform pairwise comparisons for all pairs.- ref_group
A character string to specify the reference group for comparisons.
- pairwise_method
A character string to specify the pairwise comparison method.
- multiplegroup_comparisons
A logical value to perform multiple group comparisons.
- multiple_method
A character string to specify the multiple group comparison method.
- sig_label
A character string to specify the label of the significance test. You can use "p.format" to show the p-value or "p.signif" to show the significance level. You can also use arbitrary text, with
"{p.format}"
as placeholder for the p-value and/or"{p.signif}"
as placeholder for the significance level. This only works for pairwise comparisons, not for multiple group comparisons.- sig_labelsize
A numeric value to specify the size of the significance test label.
- hide_ns
A logical value to hide the non-significant comparisons.
- facet_by
A character string specifying the column name of the data frame to facet the plot. Otherwise, the data will be split by
split_by
and generate multiple plots and combine them into one usingpatchwork::wrap_plots
- facet_scales
Whether to scale the axes of facets. Default is "fixed" Other options are "free", "free_x", "free_y". See
ggplot2::facet_wrap
- facet_ncol
A numeric value specifying the number of columns in the facet. When facet_by is a single column and facet_wrap is used.
- facet_nrow
A numeric value specifying the number of rows in the facet. When facet_by is a single column and facet_wrap is used.
- facet_byrow
A logical value indicating whether to fill the plots by row. Default is TRUE.
- title
A character string specifying the title of the plot. A function can be used to generate the title based on the default title. This is useful when split_by is used and the title needs to be dynamic.
- subtitle
A character string specifying the subtitle of the plot.
- xlab
A character string specifying the x-axis label.
- ylab
A character string specifying the y-axis label.
- seed
The random seed to use. Default is 8525.
- combine
Whether to combine the plots into one when facet is FALSE. Default is TRUE.
- nrow
A numeric value specifying the number of rows in the facet.
- ncol
A numeric value specifying the number of columns in the facet.
- byrow
A logical value indicating whether to fill the plots by row.
- axes
A string specifying how axes should be treated. Passed to
patchwork::wrap_plots()
. Only relevant whensplit_by
is used andcombine
is TRUE. Options are:'keep' will retain all axes in individual plots.
'collect' will remove duplicated axes when placed in the same run of rows or columns of the layout.
'collect_x' and 'collect_y' will remove duplicated x-axes in the columns or duplicated y-axes in the rows respectively.
- axis_titles
A string specifying how axis titltes should be treated. Passed to
patchwork::wrap_plots()
. Only relevant whensplit_by
is used andcombine
is TRUE. Options are:'keep' will retain all axis titles in individual plots.
'collect' will remove duplicated titles in one direction and merge titles in the opposite direction.
'collect_x' and 'collect_y' control this for x-axis titles and y-axis titles respectively.
- guides
A string specifying how guides should be treated in the layout. Passed to
patchwork::wrap_plots()
. Only relevant whensplit_by
is used andcombine
is TRUE. Options are:'collect' will collect guides below to the given nesting level, removing duplicates.
'keep' will stop collection at this level and let guides be placed alongside their plot.
'auto' will allow guides to be collected if a upper level tries, but place them alongside the plot if not.
- ...
Additional arguments.
- add_box
A logical value to add box plot to the plot.
- box_color
A character string to specify the color of the box plot.
- box_width
A numeric value to specify the width of the box plot.
- box_ptsize
A numeric value to specify the size of the box plot points in the middle.
Value
The Box / Violin plot(s).
When split_by
is not provided, it returns a ggplot object.
When split_by
is provided, it returns a object of plots wrapped by patchwork::wrap_plots
if combine = TRUE
;
otherwise, it returns a list of ggplot objects.
Examples
# \donttest{
set.seed(8525)
data <- data.frame(
x = rep(LETTERS[1:8], each = 40),
y = c(rnorm(160), rnorm(160, mean = 1)),
group1 = sample(c("g1", "g2"), 320, replace = TRUE),
group2 = sample(c("h1", "h2", "h3", "h4"), 320, replace = TRUE)
)
BoxPlot(data, x = "x", y = "y")
BoxPlot(data,
x = "x", y = "y",
stack = TRUE, flip = TRUE, facet_by = "group1",
add_bg = TRUE, bg_palette = "Paired"
)
BoxPlot(data,
x = "x", y = "y",
stack = TRUE, flip = TRUE, split_by = "group1",
add_bg = TRUE, bg_palette = "Paired",
palcolor = list(g1 = c("red", "blue"), g2 = c("blue", "red"))
)
# wide form data
data_wide <- data.frame(
A = rnorm(100),
B = rnorm(100),
C = rnorm(100)
)
BoxPlot(data_wide, x = c("A", "B", "C"), in_form = "wide")
# }
# \donttest{
ViolinPlot(data, x = "x", y = "y")
ViolinPlot(data, x = "x", y = "y", add_box = TRUE)
ViolinPlot(data, x = "x", y = "y", add_point = TRUE)
ViolinPlot(data, x = "x", y = "y", add_trend = TRUE)
ViolinPlot(data, x = "x", y = "y", add_stat = mean)
ViolinPlot(data, x = "x", y = "y", add_bg = TRUE)
ViolinPlot(data, x = "x", y = "y", add_line = 0)
ViolinPlot(data, x = "x", y = "y", group_by = "group1")
ViolinPlot(data,
x = "x", y = "y", group_by = "group1",
facet_by = "group2", add_box = TRUE
)
#> Warning: Groups with fewer than two datapoints have been dropped.
#> ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.
#> Warning: Groups with fewer than two datapoints have been dropped.
#> ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.
#> Warning: Groups with fewer than two datapoints have been dropped.
#> ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.
#> Warning: Groups with fewer than two datapoints have been dropped.
#> ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.
ViolinPlot(data, x = "x", y = "y", add_point = TRUE, highlight = 'group1 == "g1"',
alpha = 0.8, highlight_size = 1.5, pt_size = 1, add_box = TRUE)
ViolinPlot(data,
x = "x", y = "y", group_by = "group1",
comparisons = TRUE, sig_label = "p = {p.format}"
)
ViolinPlot(data,
x = "x", y = "y", sig_label = "p.format", hide_ns = TRUE,
facet_by = "group2", comparisons = list(c("D", "E"))
)
ViolinPlot(data,
x = "x", y = "y", fill_mode = "mean",
facet_by = "group2", palette = "Blues", multiplegroup_comparisons = TRUE
)
#> Warning: The following aesthetics were dropped during statistical transformation: fill.
#> ℹ This can happen when ggplot fails to infer the correct grouping structure in
#> the data.
#> ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
#> variable into a factor?
#> Warning: The following aesthetics were dropped during statistical transformation: fill.
#> ℹ This can happen when ggplot fails to infer the correct grouping structure in
#> the data.
#> ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
#> variable into a factor?
#> Warning: The following aesthetics were dropped during statistical transformation: fill.
#> ℹ This can happen when ggplot fails to infer the correct grouping structure in
#> the data.
#> ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
#> variable into a factor?
ViolinPlot(data,
x = "x", y = "y", fill_mode = "mean",
split_by = "group1", palette = c(g1 = "Blues", g2 = "Reds")
)
ViolinPlot(data,
x = "x", y = "y", stack = TRUE,
facet_by = "group2", add_box = TRUE, add_bg = TRUE,
bg_palette = "Paired"
)
# }