visualizeR/R/theme_lollipop.R

82 lines
2.4 KiB
R

#' Custom Theme for Lollipop Charts
#'
#' @description
#' A custom theme specifically designed for lollipop charts with appropriate grid lines and axis styling
#' based on whether the chart is flipped (horizontal) or not.
#'
#' @param flip Logical indicating whether the lollipop chart is flipped (horizontal). Default is TRUE.
#' @param axis_text_x_angle Angle for x-axis text labels. Default is 0.
#' @param axis_text_x_vjust Vertical justification for x-axis text labels. Default is 0.5.
#' @param axis_text_x_hjust Horizontal justification for x-axis text labels. Default is 0.5.
#'
#' @return A ggplot2 theme object
#'
#' @rdname theme_default
#' @export
#'
#' @examples
#' \dontrun{
#' library(ggplot2)
#' df <- data.frame(x = letters[1:5], y = c(10, 5, 7, 12, 8))
#' ggplot(df, aes(x, y)) +
#' geom_point() +
#' theme_lollipop()
#' }
theme_lollipop <- function(
flip = TRUE,
axis_text_x_angle = 0,
axis_text_x_vjust = 0.5,
axis_text_x_hjust = 0.5) {
# Set parameters based on flip
if (!flip) {
par_axis_text_font_face <- "plain"
par_axis_x <- TRUE
par_axis_y <- TRUE
par_axis_line_y <- FALSE
par_axis_ticks_y <- TRUE
par_axis_text_y <- TRUE
par_axis_line_x <- TRUE
par_axis_ticks_x <- TRUE
par_axis_text_x <- TRUE
par_grid_major_y <- TRUE
par_grid_major_x <- FALSE
par_grid_minor_y <- TRUE
par_grid_minor_x <- FALSE
} else if (flip) {
par_axis_text_font_face <- "plain"
par_axis_x <- TRUE
par_axis_y <- TRUE
par_axis_line_y <- TRUE
par_axis_ticks_y <- TRUE
par_axis_text_y <- TRUE
par_axis_line_x <- FALSE
par_axis_ticks_x <- TRUE
par_axis_text_x <- TRUE
par_grid_major_y <- FALSE
par_grid_major_x <- TRUE
par_grid_minor_y <- FALSE
par_grid_minor_x <- TRUE
}
# Theme
t <- theme_default(
axis_text_font_face = par_axis_text_font_face,
axis_x = par_axis_x,
axis_y = par_axis_y,
grid_major_y = par_grid_major_y,
grid_major_x = par_grid_major_x,
grid_minor_y = par_grid_minor_y,
grid_minor_x = par_grid_minor_x,
axis_text_y = par_axis_text_y,
axis_line_y = par_axis_line_y,
axis_ticks_y = par_axis_ticks_y,
axis_text_x = par_axis_text_x,
axis_line_x = par_axis_line_x,
axis_ticks_x = par_axis_ticks_x,
axis_text_x_angle = axis_text_x_angle,
axis_text_x_vjust = axis_text_x_vjust,
axis_text_x_hjust = axis_text_x_hjust
)
return(t)
}