1#' @include stat-.r
2NULL
3
4#' @export
5#' @rdname geom_abline
6geom_hline <- function(mapping = NULL, data = NULL,
7                       ...,
8                       yintercept,
9                       na.rm = FALSE,
10                       show.legend = NA) {
11
12  # Act like an annotation
13  if (!missing(yintercept)) {
14    # Warn if supplied mapping and/or data is going to be overwritten
15    if (!is.null(mapping)) {
16      warn_overwritten_args("geom_hline()", "mapping", "yintercept")
17    }
18    if (!is.null(data)) {
19      warn_overwritten_args("geom_hline()", "data", "yintercept")
20    }
21
22    data <- new_data_frame(list(yintercept = yintercept))
23    mapping <- aes(yintercept = yintercept)
24    show.legend <- FALSE
25  }
26
27  layer(
28    data = data,
29    mapping = mapping,
30    stat = StatIdentity,
31    geom = GeomHline,
32    position = PositionIdentity,
33    show.legend = show.legend,
34    inherit.aes = FALSE,
35    params = list(
36      na.rm = na.rm,
37      ...
38    )
39  )
40}
41
42#' @rdname ggplot2-ggproto
43#' @format NULL
44#' @usage NULL
45#' @export
46GeomHline <- ggproto("GeomHline", Geom,
47  draw_panel = function(data, panel_params, coord) {
48    ranges <- coord$backtransform_range(panel_params)
49
50    data$x    <- ranges$x[1]
51    data$xend <- ranges$x[2]
52    data$y    <- data$yintercept
53    data$yend <- data$yintercept
54
55    GeomSegment$draw_panel(unique(data), panel_params, coord)
56  },
57
58  default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA),
59  required_aes = "yintercept",
60
61  draw_key = draw_key_path
62)
63