#' Uniform "bar" charts #' #' I've been using `geom_segment` more to make "bar" charts, setting #' `xend` to whatever `x` is and `yend` to `0`. The bar widths remain #' constant without any tricks and you have granular control over the #' segment width. I decided it was time to make a `geom`. #' #' @md #' @section Aesthetics: #' `geom_ubar`` understands the following aesthetics (required aesthetics are in bold): #' #' - **`x`** #' - **`y`** #' - `alpha` #' - `colour` #' - `group` #' - `linetype` #' - `size` #' #' @inheritParams ggplot2::layer #' @param na.rm If `FALSE` (the default), removes missing values with #' a warning. If `TRUE` silently removes missing values. #' @param ... other arguments passed on to `layer`. These are #' often aesthetics, used to set an aesthetic to a fixed value, like #' `color = "red"` or `size = 3`. They may also be parameters #' to the paired geom/stat. #' @inheritParams ggplot2::layer #' @export #' @examples #' library(ggplot2) #' #' data(economics) #' ggplot(economics, aes(date, uempmed)) + #' geom_ubar() geom_ubar <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = "identity", geom = GeomUbar, position = "identity", show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggalt-ggproto #' @format NULL #' @usage NULL #' @export GeomUbar <- ggproto("GeomUbar", Geom, required_aes = c("x", "y"), non_missing_aes = c("size"), default_aes = aes( size = 0.25, colour = "black", alpha = NA ), setup_data = function(data, params) { transform(data, xend = x, yend = 0) }, draw_group = function(data, panel_scales, coord) { ggplot2::GeomSegment$draw_panel(data, panel_scales, coord) } )