90 lines
2.7 KiB
R
90 lines
2.7 KiB
R
#' @title Simple point chart
|
|
#'
|
|
#' @param df A data frame.
|
|
#' @param x A numeric column.
|
|
#' @param y Another numeric column.
|
|
#' @param group Some grouping categorical column, e.g. administrative areas or population groups.
|
|
#' @param add_color Add a color to bars (if no grouping).
|
|
#' @param flip TRUE or FALSE. Default to TRUE or horizontal bar plot.
|
|
#' @param alpha Fill transparency.
|
|
#' @param size Point size.
|
|
#' @param x_title The x scale title. Default to NULL.
|
|
#' @param y_title The y scale title. Default to NULL.
|
|
#' @param group_title The group legend 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 theme_fun Whatever theme. Default to theme_reach(). NULL if no theming needed.
|
|
#' @param scale_impact Use the package custom scales for fill and color.
|
|
#'
|
|
#' @inheritParams scale_color_impact_discrete
|
|
#'
|
|
#' @export
|
|
point <- function(df, x, y, group = "", add_color = color("branding_reach_red"), flip = TRUE, alpha = 1, size = 2, x_title = NULL, y_title = NULL, group_title = NULL, title = NULL, subtitle = NULL, caption = NULL, theme_fun = theme_reach(grid_major_y = TRUE), palette = "cat_5_ibm", scale_impact = TRUE, direction = 1, reverse_guide = TRUE) {
|
|
# # Check if numeric and character
|
|
if (!any(c("numeric", "integer") %in% class(df[[x]]))) rlang::abort(paste0(x, " must be numeric."))
|
|
if (!any(c("numeric", "integer") %in% class(df[[y]]))) rlang::abort(paste0(x, " must be numeric."))
|
|
|
|
# Mapping
|
|
if (group != "") {
|
|
g <- ggplot2::ggplot(
|
|
df,
|
|
mapping = ggplot2::aes(
|
|
x = !!rlang::sym(x),
|
|
y = !!rlang::sym(y),
|
|
fill = !!rlang::sym(group),
|
|
color = !!rlang::sym(group)
|
|
)
|
|
)
|
|
} else {
|
|
g <- ggplot2::ggplot(
|
|
df,
|
|
mapping = ggplot2::aes(
|
|
x = !!rlang::sym(x),
|
|
y = !!rlang::sym(y)
|
|
)
|
|
)
|
|
}
|
|
|
|
|
|
# Add title, subtitle, caption, x_title, y_title
|
|
g <- g + ggplot2::labs(
|
|
title = title,
|
|
subtitle = subtitle,
|
|
caption = caption,
|
|
x = x_title,
|
|
y = y_title,
|
|
color = group_title,
|
|
fill = group_title
|
|
)
|
|
|
|
# Should the graph use position_fill?
|
|
if (group != "") {
|
|
g <- g + ggplot2::geom_point(
|
|
alpha = alpha,
|
|
size = size
|
|
)
|
|
} else {
|
|
g <- g + ggplot2::geom_point(
|
|
alpha = alpha,
|
|
size = size,
|
|
color = add_color
|
|
)
|
|
}
|
|
|
|
if (flip) {
|
|
g <- g + ggplot2::coord_flip()
|
|
}
|
|
|
|
# Add theme
|
|
g <- g + theme_fun
|
|
|
|
|
|
# Add theme
|
|
if (!is.null(theme_fun)) g <- g + theme_fun
|
|
|
|
# Add scale
|
|
if (scale_impact) g <- g + scale_fill_impact_discrete(palette, direction, reverse_guide) + scale_color_impact_discrete(palette, direction, reverse_guide)
|
|
|
|
return(g)
|
|
}
|