Alluvial 1st version
This commit is contained in:
parent
a6bba23e3e
commit
b8689815d8
1 changed files with 104 additions and 0 deletions
104
R/alluvial.R
Normal file
104
R/alluvial.R
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
#' @title Simple alluvial chart
|
||||
#'
|
||||
#' @param df A data frame.
|
||||
#' @param from A character column of upstream stratum.
|
||||
#' @param to A character column of downstream stratum.
|
||||
#' @param value A numeric column of values.
|
||||
#' @param group The grouping column to fill the alluvium with.
|
||||
#' @param alpha Fill transparency. Default to 0.5.
|
||||
#' @param from_levels Order by given from levels?
|
||||
#' @param value_title The value/y scale title. Default to NULL.
|
||||
#' @param group_title The group title. Default to NULL.
|
||||
#' @param title Plot title. Default to NULL.
|
||||
#' @param subtitle Plot subtitle. Default to NULL.
|
||||
#' @param caption Plot caption. Default to NULL.
|
||||
#' @param rect_color Stratum rectangles' fill color.
|
||||
#' @param rect_border_color Stratum rectangles' border color.
|
||||
#' @param rect_text_color Stratum rectangles' text color.
|
||||
#' @param theme Whatever theme. Default to theme_reach().
|
||||
#'
|
||||
#' @return A donut chart to be used parsimoniously
|
||||
#'
|
||||
#' @export
|
||||
alluvial <- function(
|
||||
df,
|
||||
from,
|
||||
to,
|
||||
value,
|
||||
group = NULL,
|
||||
alpha = 0.5,
|
||||
from_levels = NULL,
|
||||
value_title = NULL,
|
||||
group_title = NULL,
|
||||
title = NULL,
|
||||
subtitle = NULL,
|
||||
caption = NULL,
|
||||
rect_color = cols_reach("white"),
|
||||
rect_border_color = cols_reach("main_grey"),
|
||||
rect_text_color = cols_reach("main_grey"),
|
||||
theme = theme_reach(axis_y = FALSE,
|
||||
legend_position = "none")
|
||||
){
|
||||
|
||||
if(!is.null(from_levels)) df <- dplyr::mutate(df, "{{from}}" := factor({{ from }}, levels = from_levels))
|
||||
|
||||
# General mapping
|
||||
g <- ggplot2::ggplot(
|
||||
data = df,
|
||||
mapping = ggplot2::aes(
|
||||
y = {{ value }},
|
||||
axis1 = {{ from }},
|
||||
axis3 = {{ to }}
|
||||
)
|
||||
)
|
||||
|
||||
# Add alluvium
|
||||
g <- g +
|
||||
ggalluvial::geom_alluvium(
|
||||
ggplot2::aes(
|
||||
fill = {{ group }},
|
||||
color = {{ group }}
|
||||
),
|
||||
alpha = alpha)
|
||||
|
||||
# Add stratum
|
||||
g <- g +
|
||||
ggalluvial::geom_stratum(
|
||||
fill = rect_color,
|
||||
color = rect_border_color
|
||||
)
|
||||
|
||||
# Add stratum text
|
||||
|
||||
stratum <- ggalluvial::StatStratum
|
||||
|
||||
g <- g +
|
||||
ggplot2::geom_text(
|
||||
stat = stratum,
|
||||
ggplot2::aes(label = ggplot2::after_stat(!!rlang::sym("stratum"))),
|
||||
color = cols_reach("main_grey")
|
||||
)
|
||||
|
||||
|
||||
# Add title, subtitle, caption, x_title, y_title
|
||||
g <- g + ggplot2::labs(
|
||||
y = value_title,
|
||||
title = title,
|
||||
subtitle = subtitle,
|
||||
caption = caption,
|
||||
fill = group_title,
|
||||
color = group_title
|
||||
)
|
||||
|
||||
# Remove x-axis
|
||||
g <- g + ggplot2::theme(
|
||||
axis.line.x = ggplot2::element_blank(),
|
||||
axis.ticks.x = ggplot2::element_blank(),
|
||||
axis.text.x = ggplot2::element_blank(),
|
||||
axis.title.x = ggplot2::element_blank()
|
||||
)
|
||||
|
||||
g <- g + theme
|
||||
|
||||
return(g)
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue