datasets::anscombe %>%
  pivot_longer(cols = 1:8) %>%
  mutate(group = str_extract(name, "\\d")) %>%
  mutate(var = str_extract(name, "\\w")) %>% 
  select(-name) %>% 
  pivot_wider(names_from = var, 
              values_from = value) %>% 
  unnest() ->
tidy_anscombe
## Warning: Values in `value` are not uniquely identified; output will contain list-cols.
## * Use `values_fn = list(value = list)` to suppress this warning.
## * Use `values_fn = list(value = length)` to identify where the duplicates arise
## * Use `values_fn = list(value = summary_fun)` to summarise duplicates
## Warning: `cols` is now required.
## Please use `cols = c(x, y)`
tidy_anscombe %>% 
  ggplot() + 
  aes(x = x, y = y) + 
  geom_point() + 
  aes(color = group) + 
  facet_wrap(facets = vars(paste("dataset", group))) + 
  # mean of x
  ggxmean::geom_x_mean() + 
  ggxmean::geom_y_mean() + 
  # mean of y
  ggxmean:::geom_x1sd(linetype = "dashed") + 
  ggxmean:::geom_y1sd(linetype = "dashed") + 
  # linear model
  ggxmean::geom_lm() + 
  ggxmean::geom_lm_formula() + 
  # Pearson correlation
  ggxmean:::geom_corrlabel() ->
g


g %>% ggplot_build() ->
  build

build$plot$theme
## list()
ggplot_build(g)$layout$panel_ranges[[1]]$x.range
## NULL
str(ggplot_build(g))
## List of 3
##  $ data  :List of 8
##   ..$ :'data.frame': 44 obs. of  10 variables:
##   .. ..$ colour: chr [1:44] "#F8766D" "#F8766D" "#F8766D" "#F8766D" ...
##   .. ..$ x     : num [1:44] 10 8 13 9 11 14 6 4 12 7 ...
##   .. ..$ y     : num [1:44] 8.04 6.95 7.58 8.81 8.33 ...
##   .. ..$ PANEL : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ group : int [1:44] 1 1 1 1 1 1 1 1 1 1 ...
##   .. .. ..- attr(*, "n")= int 4
##   .. ..$ shape : num [1:44] 19 19 19 19 19 19 19 19 19 19 ...
##   .. ..$ size  : num [1:44] 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 ...
##   .. ..$ fill  : logi [1:44] NA NA NA NA NA NA ...
##   .. ..$ alpha : logi [1:44] NA NA NA NA NA NA ...
##   .. ..$ stroke: num [1:44] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
##   ..$ :'data.frame': 4 obs. of  7 variables:
##   .. ..$ colour  : chr [1:4] "#F8766D" "#7CAE00" "#00BFC4" "#C77CFF"
##   .. ..$ x       : num [1:4] 9 9 9 9
##   .. ..$ PANEL   : Factor w/ 4 levels "1","2","3","4": 1 2 3 4
##   .. ..$ group   : int [1:4] 1 2 3 4
##   .. ..$ size    : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ linetype: num [1:4] 1 1 1 1
##   .. ..$ alpha   : logi [1:4] NA NA NA NA
##   ..$ :'data.frame': 4 obs. of  7 variables:
##   .. ..$ colour  : chr [1:4] "#F8766D" "#7CAE00" "#00BFC4" "#C77CFF"
##   .. ..$ y       : num [1:4] 7.5 7.5 7.5 7.5
##   .. ..$ PANEL   : Factor w/ 4 levels "1","2","3","4": 1 2 3 4
##   .. ..$ group   : int [1:4] 1 2 3 4
##   .. ..$ size    : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ linetype: num [1:4] 1 1 1 1
##   .. ..$ alpha   : logi [1:4] NA NA NA NA
##   ..$ :'data.frame': 8 obs. of  10 variables:
##   .. ..$ colour  : chr [1:8] "#F8766D" "#F8766D" "#7CAE00" "#7CAE00" ...
##   .. ..$ x       : num [1:8] 12.32 5.68 12.32 5.68 12.32 ...
##   .. ..$ xend    : num [1:8] 12.32 5.68 12.32 5.68 12.32 ...
##   .. ..$ y       : num [1:8] -Inf Inf -Inf Inf -Inf ...
##   .. ..$ yend    : num [1:8] Inf -Inf Inf -Inf Inf ...
##   .. ..$ PANEL   : Factor w/ 4 levels "1","2","3","4": 1 1 2 2 3 3 4 4
##   .. ..$ group   : int [1:8] 1 1 2 2 3 3 4 4
##   .. ..$ size    : num [1:8] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
##   .. ..$ linetype: chr [1:8] "dashed" "dashed" "dashed" "dashed" ...
##   .. ..$ alpha   : logi [1:8] NA NA NA NA NA NA ...
##   ..$ :'data.frame': 8 obs. of  10 variables:
##   .. ..$ colour  : chr [1:8] "#F8766D" "#F8766D" "#7CAE00" "#7CAE00" ...
##   .. ..$ y       : num [1:8] 9.53 5.47 9.53 5.47 9.53 ...
##   .. ..$ yend    : num [1:8] 9.53 5.47 9.53 5.47 9.53 ...
##   .. ..$ x       : num [1:8] -Inf Inf -Inf Inf -Inf ...
##   .. ..$ xend    : num [1:8] Inf -Inf Inf -Inf Inf ...
##   .. ..$ PANEL   : Factor w/ 4 levels "1","2","3","4": 1 1 2 2 3 3 4 4
##   .. ..$ group   : int [1:8] 1 1 2 2 3 3 4 4
##   .. ..$ size    : num [1:8] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
##   .. ..$ linetype: chr [1:8] "dashed" "dashed" "dashed" "dashed" ...
##   .. ..$ alpha   : logi [1:8] NA NA NA NA NA NA ...
##   ..$ :'data.frame': 320 obs. of  11 variables:
##   .. ..$ colour     : chr [1:320] "#F8766D" "#F8766D" "#F8766D" "#F8766D" ...
##   .. ..$ x          : num [1:320] 4 4.13 4.25 4.38 4.51 ...
##   .. ..$ y          : num [1:320] 5 5.06 5.13 5.19 5.25 ...
##   .. ..$ flipped_aes: logi [1:320] FALSE FALSE FALSE FALSE FALSE FALSE ...
##   .. ..$ PANEL      : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ group      : int [1:320] 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ fill       : chr [1:320] "grey60" "grey60" "grey60" "grey60" ...
##   .. ..$ size       : num [1:320] 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ linetype   : num [1:320] 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ weight     : num [1:320] 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ alpha      : num [1:320] 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 ...
##   ..$ :'data.frame': 4 obs. of  15 variables:
##   .. ..$ colour    : chr [1:4] "#F8766D" "#7CAE00" "#00BFC4" "#C77CFF"
##   .. ..$ x         : num [1:4] 9 9 9 9
##   .. ..$ y         : num [1:4] 7.5 7.5 7.5 7.5
##   .. ..$ label     : Factor w/ 1 level "y = 0.500x + 3.00": 1 1 1 1
##   .. ..$ PANEL     : Factor w/ 4 levels "1","2","3","4": 1 2 3 4
##   .. ..$ group     : int [1:4] 1 2 3 4
##   .. ..$ fill      : chr [1:4] "white" "white" "white" "white"
##   .. ..$ size      : num [1:4] 3.88 3.88 3.88 3.88
##   .. ..$ angle     : num [1:4] 0 0 0 0
##   .. ..$ hjust     : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ vjust     : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ alpha     : logi [1:4] NA NA NA NA
##   .. ..$ family    : chr [1:4] "" "" "" ""
##   .. ..$ fontface  : num [1:4] 1 1 1 1
##   .. ..$ lineheight: num [1:4] 1.2 1.2 1.2 1.2
##   ..$ :'data.frame': 4 obs. of  15 variables:
##   .. ..$ colour    : chr [1:4] "#F8766D" "#7CAE00" "#00BFC4" "#C77CFF"
##   .. ..$ y         : num [1:4] 8.25 8.25 8.25 8.25
##   .. ..$ x         : num [1:4] 10.7 10.7 10.7 10.7
##   .. ..$ label     : Factor w/ 2 levels "0.816","0.817": 1 1 1 2
##   .. ..$ PANEL     : Factor w/ 4 levels "1","2","3","4": 1 2 3 4
##   .. ..$ group     : int [1:4] 1 2 3 4
##   .. ..$ fill      : chr [1:4] "white" "white" "white" "white"
##   .. ..$ size      : num [1:4] 3.88 3.88 3.88 3.88
##   .. ..$ angle     : num [1:4] 0 0 0 0
##   .. ..$ hjust     : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ vjust     : num [1:4] 0.5 0.5 0.5 0.5
##   .. ..$ alpha     : logi [1:4] NA NA NA NA
##   .. ..$ family    : chr [1:4] "" "" "" ""
##   .. ..$ fontface  : num [1:4] 1 1 1 1
##   .. ..$ lineheight: num [1:4] 1.2 1.2 1.2 1.2
##  $ layout:Classes 'Layout', 'ggproto', 'gg' <ggproto object: Class Layout, gg>
##     coord: <ggproto object: Class CoordCartesian, Coord, gg>
##         aspect: function
##         backtransform_range: function
##         clip: on
##         default: TRUE
##         distance: function
##         expand: TRUE
##         is_free: function
##         is_linear: function
##         labels: function
##         limits: list
##         modify_scales: function
##         range: function
##         render_axis_h: function
##         render_axis_v: function
##         render_bg: function
##         render_fg: function
##         setup_data: function
##         setup_layout: function
##         setup_panel_guides: function
##         setup_panel_params: function
##         setup_params: function
##         train_panel_guides: function
##         transform: function
##         super:  <ggproto object: Class CoordCartesian, Coord, gg>
##     coord_params: list
##     facet: <ggproto object: Class FacetWrap, Facet, gg>
##         compute_layout: function
##         draw_back: function
##         draw_front: function
##         draw_labels: function
##         draw_panels: function
##         finish_data: function
##         init_scales: function
##         map_data: function
##         params: list
##         setup_data: function
##         setup_params: function
##         shrink: TRUE
##         train_scales: function
##         vars: function
##         super:  <ggproto object: Class FacetWrap, Facet, gg>
##     facet_params: list
##     finish_data: function
##     get_scales: function
##     layout: data.frame
##     map_position: function
##     panel_params: list
##     panel_scales_x: list
##     panel_scales_y: list
##     render: function
##     render_labels: function
##     reset_scales: function
##     setup: function
##     setup_panel_guides: function
##     setup_panel_params: function
##     train_position: function
##     xlabel: function
##     ylabel: function
##     super:  <ggproto object: Class Layout, gg> 
##  $ plot  :List of 9
##   ..$ data       : tibble [44 × 3] (S3: tbl_df/tbl/data.frame)
##   .. ..$ group: chr [1:44] "1" "1" "1" "1" ...
##   .. ..$ x    : num [1:44] 10 8 13 9 11 14 6 4 12 7 ...
##   .. ..$ y    : num [1:44] 8.04 6.95 7.58 8.81 8.33 ...
##   ..$ layers     :List of 8
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomPoint, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: size shape colour
##         optional_aes: 
##         parameters: function
##         required_aes: x y
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatIdentity, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: 
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomXline, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatXmean, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomYline, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: y
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatYmean, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: y
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomSegment, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: linetype size shape
##         optional_aes: 
##         parameters: function
##         required_aes: x y xend yend
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatX1sd, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomSegment, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: linetype size shape
##         optional_aes: 
##         parameters: function
##         required_aes: x y xend yend
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatY1sd, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: y
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomSmooth, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm orientation
##         handle_na: function
##         non_missing_aes: 
##         optional_aes: ymin ymax
##         parameters: function
##         required_aes: x y
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatSmooth, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm orientation
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x y
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomLabel, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x y label
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class StatOlsformula, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x y
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto', 'gg' <ggproto object: Class LayerInstance, Layer, gg>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     computed_geom_params: list
##     computed_mapping: uneval
##     computed_stat_params: list
##     data: waiver
##     draw_geom: function
##     finish_statistics: function
##     geom: <ggproto object: Class GeomLabel, Geom, gg>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x y label
##         setup_data: function
##         setup_params: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom, gg>
##     geom_params: list
##     inherit.aes: TRUE
##     layer_data: function
##     map_statistic: function
##     mapping: NULL
##     position: <ggproto object: Class PositionIdentity, Position, gg>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position, gg>
##     print: function
##     setup_layer: function
##     show.legend: NA
##     stat: <ggproto object: Class Corrlabel, Stat, gg>
##         aesthetics: function
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         finish_layer: function
##         non_missing_aes: 
##         optional_aes: 
##         parameters: function
##         required_aes: x y
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat, gg>
##     stat_params: list
##     super:  <ggproto object: Class Layer, gg> 
##   ..$ scales     :Classes 'ScalesList', 'ggproto', 'gg' <ggproto object: Class ScalesList, gg>
##     add: function
##     clone: function
##     find: function
##     get_scales: function
##     has_scale: function
##     input: function
##     n: function
##     non_position_scales: function
##     scales: list
##     super:  <ggproto object: Class ScalesList, gg> 
##   ..$ mapping    :List of 3
##   .. ..$ colour: language ~group
##   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. ..$ x     : language ~x
##   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. ..$ y     : language ~y
##   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. ..- attr(*, "class")= chr "uneval"
##   ..$ theme      : list()
##   ..$ coordinates:Classes 'CoordCartesian', 'Coord', 'ggproto', 'gg' <ggproto object: Class CoordCartesian, Coord, gg>
##     aspect: function
##     backtransform_range: function
##     clip: on
##     default: TRUE
##     distance: function
##     expand: TRUE
##     is_free: function
##     is_linear: function
##     labels: function
##     limits: list
##     modify_scales: function
##     range: function
##     render_axis_h: function
##     render_axis_v: function
##     render_bg: function
##     render_fg: function
##     setup_data: function
##     setup_layout: function
##     setup_panel_guides: function
##     setup_panel_params: function
##     setup_params: function
##     train_panel_guides: function
##     transform: function
##     super:  <ggproto object: Class CoordCartesian, Coord, gg> 
##   ..$ facet      :Classes 'FacetWrap', 'Facet', 'ggproto', 'gg' <ggproto object: Class FacetWrap, Facet, gg>
##     compute_layout: function
##     draw_back: function
##     draw_front: function
##     draw_labels: function
##     draw_panels: function
##     finish_data: function
##     init_scales: function
##     map_data: function
##     params: list
##     setup_data: function
##     setup_params: function
##     shrink: TRUE
##     train_scales: function
##     vars: function
##     super:  <ggproto object: Class FacetWrap, Facet, gg> 
##   ..$ plot_env   :<environment: 0x7f971fb43b00> 
##   ..$ labels     :List of 4
##   .. ..$ colour: chr "group"
##   .. ..$ x     : chr "x"
##   .. ..$ y     : chr "y"
##   .. ..$ alt   : chr ""
##   ..- attr(*, "class")= chr [1:2] "gg" "ggplot"
##  - attr(*, "class")= chr "ggplot_built"