Status Quo
library(ggplot2)
set.seed(1234)
ggplot(palmerpenguins::penguins |> dplyr::sample_n(10), aes(sex)) +
stat_count() +
facet_wrap(~species) ->
p
p
# ggplot2::ggplot_build()
# function (plot)
# {
plot <- ggplot2:::plot_clone(p); plot |> str() # step 1.
## List of 11
## $ data : tibble [10 × 8] (S3: tbl_df/tbl/data.frame)
## ..$ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 2 2 1 1 1 1 1 3 1 2
## ..$ island : Factor w/ 3 levels "Biscoe","Dream",..: 2 2 1 1 2 2 1 1 2 2
## ..$ bill_length_mm : num [1:10] 51.3 45.6 35 38.1 36.8 40.3 37.7 46.2 38.9 49.8
## ..$ bill_depth_mm : num [1:10] 18.2 19.4 17.9 16.5 18.5 18.5 16 14.9 18.8 17.3
## ..$ flipper_length_mm: int [1:10] 197 194 192 198 193 196 183 221 190 198
## ..$ body_mass_g : int [1:10] 3750 3525 3725 3825 3500 4350 3075 5300 3600 3675
## ..$ sex : Factor w/ 2 levels "female","male": 2 1 1 1 1 2 1 2 1 1
## ..$ year : int [1:10] 2007 2009 2009 2009 2009 2008 2009 2008 2008 2009
## $ layers :List of 1
## ..$ :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
## constructor: call
## data: waiver
## draw_geom: function
## finish_statistics: function
## geom: <ggproto object: Class GeomBar, GeomRect, Geom, gg>
## aesthetics: function
## default_aes: uneval
## draw_group: function
## draw_key: function
## draw_layer: function
## draw_panel: function
## extra_params: just na.rm orientation
## handle_na: function
## non_missing_aes: xmin xmax ymin ymax
## optional_aes:
## parameters: function
## rename_size: TRUE
## required_aes: x y
## setup_data: function
## setup_params: function
## use_defaults: function
## super: <ggproto object: Class GeomRect, Geom, gg>
## geom_params: list
## inherit.aes: TRUE
## layer_data: function
## map_statistic: function
## mapping: NULL
## position: <ggproto object: Class PositionStack, Position, gg>
## compute_layer: function
## compute_panel: function
## fill: FALSE
## required_aes:
## reverse: FALSE
## setup_data: function
## setup_params: function
## type: NULL
## vjust: 1
## super: <ggproto object: Class Position, gg>
## print: function
## setup_layer: function
## show.legend: NA
## stat: <ggproto object: Class StatCount, Stat, gg>
## aesthetics: function
## compute_group: function
## compute_layer: function
## compute_panel: function
## default_aes: uneval
## dropped_aes: weight
## 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>
## $ scales :Classes 'ScalesList', 'ggproto', 'gg' <ggproto object: Class ScalesList, gg>
## add: function
## add_defaults: function
## add_missing: function
## backtransform_df: function
## clone: function
## find: function
## get_scales: function
## has_scale: function
## input: function
## map_df: function
## n: function
## non_position_scales: function
## scales: list
## train_df: function
## transform_df: function
## super: <ggproto object: Class ScalesList, gg>
## $ guides :Classes 'Guides', 'ggproto', 'gg' <ggproto object: Class Guides, gg>
## add: function
## assemble: function
## build: function
## draw: function
## get_custom: function
## get_guide: function
## get_params: function
## get_position: function
## guides: NULL
## merge: function
## missing: <ggproto object: Class GuideNone, Guide, gg>
## add_title: function
## arrange_layout: function
## assemble_drawing: function
## available_aes: any
## build_decor: function
## build_labels: function
## build_ticks: function
## build_title: function
## draw: function
## draw_early_exit: function
## elements: list
## extract_decor: function
## extract_key: function
## extract_params: function
## get_layer_key: function
## hashables: list
## measure_grobs: function
## merge: function
## override_elements: function
## params: list
## process_layers: function
## setup_elements: function
## setup_params: function
## train: function
## transform: function
## super: <ggproto object: Class GuideNone, Guide, gg>
## package_box: function
## print: function
## process_layers: function
## setup: function
## subset_guides: function
## train: function
## update_params: function
## super: <ggproto object: Class Guides, gg>
## $ mapping :List of 1
## ..$ x: language ~sex
## .. ..- 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: R_GlobalEnv>
## $ layout :Classes 'Layout', 'ggproto', 'gg' <ggproto object: Class Layout, gg>
## coord: NULL
## coord_params: list
## facet: NULL
## facet_params: list
## finish_data: function
## get_scales: function
## layout: NULL
## map_position: function
## panel_params: NULL
## panel_scales_x: NULL
## panel_scales_y: NULL
## render: function
## render_labels: function
## reset_scales: function
## resolve_label: function
## setup: function
## setup_panel_guides: function
## setup_panel_params: function
## train_position: function
## super: <ggproto object: Class Layout, gg>
## $ labels :List of 3
## ..$ x : chr "sex"
## ..$ y : chr "count"
## .. ..- attr(*, "fallback")= logi TRUE
## ..$ weight: chr "weight"
## .. ..- attr(*, "fallback")= logi TRUE
## - attr(*, "class")= chr [1:2] "gg" "ggplot"
if (length(plot$layers) == 0) { plot <- plot + geom_blank()}; plot |> str() # step 2.
## List of 11
## $ data : tibble [10 × 8] (S3: tbl_df/tbl/data.frame)
## ..$ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 2 2 1 1 1 1 1 3 1 2
## ..$ island : Factor w/ 3 levels "Biscoe","Dream",..: 2 2 1 1 2 2 1 1 2 2
## ..$ bill_length_mm : num [1:10] 51.3 45.6 35 38.1 36.8 40.3 37.7 46.2 38.9 49.8
## ..$ bill_depth_mm : num [1:10] 18.2 19.4 17.9 16.5 18.5 18.5 16 14.9 18.8 17.3
## ..$ flipper_length_mm: int [1:10] 197 194 192 198 193 196 183 221 190 198
## ..$ body_mass_g : int [1:10] 3750 3525 3725 3825 3500 4350 3075 5300 3600 3675
## ..$ sex : Factor w/ 2 levels "female","male": 2 1 1 1 1 2 1 2 1 1
## ..$ year : int [1:10] 2007 2009 2009 2009 2009 2008 2009 2008 2008 2009
## $ layers :List of 1
## ..$ :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
## constructor: call
## data: waiver
## draw_geom: function
## finish_statistics: function
## geom: <ggproto object: Class GeomBar, GeomRect, Geom, gg>
## aesthetics: function
## default_aes: uneval
## draw_group: function
## draw_key: function
## draw_layer: function
## draw_panel: function
## extra_params: just na.rm orientation
## handle_na: function
## non_missing_aes: xmin xmax ymin ymax
## optional_aes:
## parameters: function
## rename_size: TRUE
## required_aes: x y
## setup_data: function
## setup_params: function
## use_defaults: function
## super: <ggproto object: Class GeomRect, Geom, gg>
## geom_params: list
## inherit.aes: TRUE
## layer_data: function
## map_statistic: function
## mapping: NULL
## position: <ggproto object: Class PositionStack, Position, gg>
## compute_layer: function
## compute_panel: function
## fill: FALSE
## required_aes:
## reverse: FALSE
## setup_data: function
## setup_params: function
## type: NULL
## vjust: 1
## super: <ggproto object: Class Position, gg>
## print: function
## setup_layer: function
## show.legend: NA
## stat: <ggproto object: Class StatCount, Stat, gg>
## aesthetics: function
## compute_group: function
## compute_layer: function
## compute_panel: function
## default_aes: uneval
## dropped_aes: weight
## 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>
## $ scales :Classes 'ScalesList', 'ggproto', 'gg' <ggproto object: Class ScalesList, gg>
## add: function
## add_defaults: function
## add_missing: function
## backtransform_df: function
## clone: function
## find: function
## get_scales: function
## has_scale: function
## input: function
## map_df: function
## n: function
## non_position_scales: function
## scales: list
## train_df: function
## transform_df: function
## super: <ggproto object: Class ScalesList, gg>
## $ guides :Classes 'Guides', 'ggproto', 'gg' <ggproto object: Class Guides, gg>
## add: function
## assemble: function
## build: function
## draw: function
## get_custom: function
## get_guide: function
## get_params: function
## get_position: function
## guides: NULL
## merge: function
## missing: <ggproto object: Class GuideNone, Guide, gg>
## add_title: function
## arrange_layout: function
## assemble_drawing: function
## available_aes: any
## build_decor: function
## build_labels: function
## build_ticks: function
## build_title: function
## draw: function
## draw_early_exit: function
## elements: list
## extract_decor: function
## extract_key: function
## extract_params: function
## get_layer_key: function
## hashables: list
## measure_grobs: function
## merge: function
## override_elements: function
## params: list
## process_layers: function
## setup_elements: function
## setup_params: function
## train: function
## transform: function
## super: <ggproto object: Class GuideNone, Guide, gg>
## package_box: function
## print: function
## process_layers: function
## setup: function
## subset_guides: function
## train: function
## update_params: function
## super: <ggproto object: Class Guides, gg>
## $ mapping :List of 1
## ..$ x: language ~sex
## .. ..- 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: R_GlobalEnv>
## $ layout :Classes 'Layout', 'ggproto', 'gg' <ggproto object: Class Layout, gg>
## coord: NULL
## coord_params: list
## facet: NULL
## facet_params: list
## finish_data: function
## get_scales: function
## layout: NULL
## map_position: function
## panel_params: NULL
## panel_scales_x: NULL
## panel_scales_y: NULL
## render: function
## render_labels: function
## reset_scales: function
## resolve_label: function
## setup: function
## setup_panel_guides: function
## setup_panel_params: function
## train_position: function
## super: <ggproto object: Class Layout, gg>
## $ labels :List of 3
## ..$ x : chr "sex"
## ..$ y : chr "count"
## .. ..- attr(*, "fallback")= logi TRUE
## ..$ weight: chr "weight"
## .. ..- attr(*, "fallback")= logi TRUE
## - attr(*, "class")= chr [1:2] "gg" "ggplot"
layers <- plot$layers; layers # step 3.
## [[1]]
## geom_bar: na.rm = FALSE, orientation = NA, width = NULL
## stat_count: na.rm = FALSE, orientation = NA, width = NULL
## position_stack
data <- rep(list(NULL), length(layers)); data # step 4.
## [[1]]
## NULL
scales <- plot$scales; data # step 1.
## [[1]]
## NULL
data <- ggplot2:::by_layer(function(l, d) l$layer_data(plot$data), layers, data, "computing layer data"); data # step 5.
## [[1]]
## # A tibble: 10 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Chinstrap Dream 51.3 18.2 197 3750
## 2 Chinstrap Dream 45.6 19.4 194 3525
## 3 Adelie Biscoe 35 17.9 192 3725
## 4 Adelie Biscoe 38.1 16.5 198 3825
## 5 Adelie Dream 36.8 18.5 193 3500
## 6 Adelie Dream 40.3 18.5 196 4350
## 7 Adelie Biscoe 37.7 16 183 3075
## 8 Gentoo Biscoe 46.2 14.9 221 5300
## 9 Adelie Dream 38.9 18.8 190 3600
## 10 Chinstrap Dream 49.8 17.3 198 3675
## # ℹ 2 more variables: sex <fct>, year <int>
data <- ggplot2:::by_layer(function(l, d) l$setup_layer(d, plot), layers, data, "setting up layer"); data # step 6.
## [[1]]
## # A tibble: 10 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Chinstrap Dream 51.3 18.2 197 3750
## 2 Chinstrap Dream 45.6 19.4 194 3525
## 3 Adelie Biscoe 35 17.9 192 3725
## 4 Adelie Biscoe 38.1 16.5 198 3825
## 5 Adelie Dream 36.8 18.5 193 3500
## 6 Adelie Dream 40.3 18.5 196 4350
## 7 Adelie Biscoe 37.7 16 183 3075
## 8 Gentoo Biscoe 46.2 14.9 221 5300
## 9 Adelie Dream 38.9 18.8 190 3600
## 10 Chinstrap Dream 49.8 17.3 198 3675
## # ℹ 2 more variables: sex <fct>, year <int>
layout <- ggplot2:::create_layout(plot$facet, plot$coordinates, plot$layout); data # step 7.
## [[1]]
## # A tibble: 10 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Chinstrap Dream 51.3 18.2 197 3750
## 2 Chinstrap Dream 45.6 19.4 194 3525
## 3 Adelie Biscoe 35 17.9 192 3725
## 4 Adelie Biscoe 38.1 16.5 198 3825
## 5 Adelie Dream 36.8 18.5 193 3500
## 6 Adelie Dream 40.3 18.5 196 4350
## 7 Adelie Biscoe 37.7 16 183 3075
## 8 Gentoo Biscoe 46.2 14.9 221 5300
## 9 Adelie Dream 38.9 18.8 190 3600
## 10 Chinstrap Dream 49.8 17.3 198 3675
## # ℹ 2 more variables: sex <fct>, year <int>
data <- layout$setup(data, plot$data, plot$plot_env); data # step 8.
## [[1]]
## # A tibble: 10 × 9
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Chinstrap Dream 51.3 18.2 197 3750
## 2 Chinstrap Dream 45.6 19.4 194 3525
## 3 Adelie Biscoe 35 17.9 192 3725
## 4 Adelie Biscoe 38.1 16.5 198 3825
## 5 Adelie Dream 36.8 18.5 193 3500
## 6 Adelie Dream 40.3 18.5 196 4350
## 7 Adelie Biscoe 37.7 16 183 3075
## 8 Gentoo Biscoe 46.2 14.9 221 5300
## 9 Adelie Dream 38.9 18.8 190 3600
## 10 Chinstrap Dream 49.8 17.3 198 3675
## # ℹ 3 more variables: sex <fct>, year <int>, PANEL <fct>
data <- ggplot2:::by_layer(function(l, d) l$compute_aesthetics(d, plot), layers, data, "computing aesthetics"); data # step 9.
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
data <- .ignore_data(data); data # step 10.
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
data <- lapply(data, scales$transform_df); data # step 11
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
scale_x <- function() scales$get_scales("x"); data # step 12
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
scale_y <- function() scales$get_scales("y"); data # step 13
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
layout$train_position(data, scale_x(), scale_y()); data # step 14
## [[1]]
## x PANEL group
## 1 male 2 2
## 2 female 2 1
## 3 female 1 1
## 4 female 1 1
## 5 female 1 1
## 6 male 1 2
## 7 female 1 1
## 8 male 3 2
## 9 female 1 1
## 10 female 2 1
data <- layout$map_position(data); data # step 15
## [[1]]
## x PANEL group
## 1 2 2 2
## 2 1 2 1
## 3 1 1 1
## 4 1 1 1
## 5 1 1 1
## 6 2 1 2
## 7 1 1 1
## 8 2 3 2
## 9 1 1 1
## 10 1 2 1
data <- .expose_data(data); data # step 16
## [[1]]
## x PANEL group
## 1 2 2 2
## 2 1 2 1
## 3 1 1 1
## 4 1 1 1
## 5 1 1 1
## 6 2 1 2
## 7 1 1 1
## 8 2 3 2
## 9 1 1 1
## 10 1 2 1
data <- ggplot2:::by_layer(function(l, d) l$compute_statistic(d, layout), layers, data, "computing stat"); data # step 17
## [[1]]
## count prop x width flipped_aes PANEL group
## 1 5 1 1 0.9 FALSE 1 1
## 2 1 1 2 0.9 FALSE 1 2
## 3 2 1 1 0.9 FALSE 2 1
## 4 1 1 2 0.9 FALSE 2 2
## 5 1 1 2 0.9 FALSE 3 2
data <- ggplot2:::by_layer(function(l, d) l$map_statistic(d, plot), layers, data, "mapping stat to aesthetics"); data # step 18
## [[1]]
## y count prop x width flipped_aes PANEL group
## 1 5 5 1 1 0.9 FALSE 1 1
## 2 1 1 1 2 0.9 FALSE 1 2
## 3 2 2 1 1 0.9 FALSE 2 1
## 4 1 1 1 2 0.9 FALSE 2 2
## 5 1 1 1 2 0.9 FALSE 3 2
plot$scales$add_missing(c("x", "y"), plot$plot_env); data # step 19
## [[1]]
## y count prop x width flipped_aes PANEL group
## 1 5 5 1 1 0.9 FALSE 1 1
## 2 1 1 1 2 0.9 FALSE 1 2
## 3 2 2 1 1 0.9 FALSE 2 1
## 4 1 1 1 2 0.9 FALSE 2 2
## 5 1 1 1 2 0.9 FALSE 3 2
data <- ggplot2:::by_layer(function(l, d) l$compute_geom_1(d), layers, data, "setting up geom"); data # step 20
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
data <- ggplot2:::by_layer(function(l, d) l$compute_position(d, layout), layers, data, "computing position"); data # step 21
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
data <- .ignore_data(data); data # step 22
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
layout$reset_scales(); data # step 23
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
layout$train_position(data, scale_x(), scale_y()); data #layout # step 24
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
layout$setup_panel_params(); data #layout # step 25
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
data <- layout$map_position(data); data # step 26
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
layout$setup_panel_guides(plot$guides, plot$layers); data #layout # step 27
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
npscales <- scales$non_position_scales(); data #npscales # step 28
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
if (npscales$n() > 0) {
lapply(data, npscales$train_df)
plot$guides <- plot$guides$build(npscales, plot$layers,
plot$labels, data)
data <- lapply(data, npscales$map_df)
}else {
plot$guides <- plot$guides$get_custom()
}; data# plot$guides step 29
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
data <- .expose_data(data); data # step 30
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45
data <- ggplot2:::by_layer(function(l, d) l$compute_geom_2(d), layers,
data, "setting up geom aesthetics"); data # step 31
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour fill
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45 NA grey35
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45 NA grey35
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45 NA grey35
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45 NA grey35
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45 NA grey35
## linewidth linetype alpha
## 1 0.5 1 NA
## 2 0.5 1 NA
## 3 0.5 1 NA
## 4 0.5 1 NA
## 5 0.5 1 NA
data <- ggplot2:::by_layer(function(l, d) l$finish_statistics(d),
layers, data, "finishing layer stat"); data # step 32
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour fill
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45 NA grey35
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45 NA grey35
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45 NA grey35
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45 NA grey35
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45 NA grey35
## linewidth linetype alpha
## 1 0.5 1 NA
## 2 0.5 1 NA
## 3 0.5 1 NA
## 4 0.5 1 NA
## 5 0.5 1 NA
data <- layout$finish_data(data); data # step 33
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour fill
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45 NA grey35
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45 NA grey35
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45 NA grey35
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45 NA grey35
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45 NA grey35
## linewidth linetype alpha
## 1 0.5 1 NA
## 2 0.5 1 NA
## 3 0.5 1 NA
## 4 0.5 1 NA
## 5 0.5 1 NA
plot$labels$alt <- get_alt_text(plot) # step 34
structure(list(data = data, layout = layout, plot = plot),
class = "ggplot_built"); data # step 35
## $data
## $data[[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour fill
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45 NA grey35
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45 NA grey35
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45 NA grey35
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45 NA grey35
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45 NA grey35
## linewidth linetype alpha
## 1 0.5 1 NA
## 2 0.5 1 NA
## 3 0.5 1 NA
## 4 0.5 1 NA
## 5 0.5 1 NA
##
##
## $layout
## <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
## resolve_label: function
## setup: function
## setup_panel_guides: function
## setup_panel_params: function
## train_position: function
## super: <ggproto object: Class Layout, gg>
##
## $plot
##
## attr(,"class")
## [1] "ggplot_built"
## [[1]]
## y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour fill
## 1 5 5 1 1 FALSE 1 1 0 5 0.55 1.45 NA grey35
## 2 1 1 1 2 FALSE 1 2 0 1 1.55 2.45 NA grey35
## 3 2 2 1 1 FALSE 2 1 0 2 0.55 1.45 NA grey35
## 4 1 1 1 2 FALSE 2 2 0 1 1.55 2.45 NA grey35
## 5 1 1 1 2 FALSE 3 2 0 1 1.55 2.45 NA grey35
## linewidth linetype alpha
## 1 0.5 1 NA
## 2 0.5 1 NA
## 3 0.5 1 NA
## 4 0.5 1 NA
## 5 0.5 1 NA
# }