Skip to content

Commit

Permalink
Improve performance of layers without positional scales
Browse files Browse the repository at this point in the history
  • Loading branch information
zeehio committed Nov 6, 2022
1 parent 63125db commit a9e5d00
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 16 deletions.
21 changes: 14 additions & 7 deletions R/facet-.r
Original file line number Diff line number Diff line change
Expand Up @@ -101,20 +101,27 @@ Facet <- ggproto("Facet", NULL,
train_scales = function(x_scales, y_scales, layout, data, params) {
# loop over each layer, training x and y scales in turn
for (layer_data in data) {
match_id <- match(layer_data$PANEL, layout$PANEL)
match_id <- NULL

if (!is.null(x_scales)) {
x_vars <- intersect(x_scales[[1]]$aesthetics, names(layer_data))
SCALE_X <- layout$SCALE_X[match_id]

scale_apply(layer_data, x_vars, "train", SCALE_X, x_scales)
if (length(x_vars) > 0) {
match_id <- match(layer_data$PANEL, layout$PANEL)
SCALE_X <- layout$SCALE_X[match_id]
scale_apply(layer_data, x_vars, "train", SCALE_X, x_scales)
}
}

if (!is.null(y_scales)) {
y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data))
SCALE_Y <- layout$SCALE_Y[match_id]

scale_apply(layer_data, y_vars, "train", SCALE_Y, y_scales)
if (length(y_vars) > 0) {
if (is.null(match_id)) {
match_id <- match(layer_data$PANEL, layout$PANEL)
}
SCALE_Y <- layout$SCALE_Y[match_id]

scale_apply(layer_data, y_vars, "train", SCALE_Y, y_scales)
}
}
}
},
Expand Down
26 changes: 17 additions & 9 deletions R/layout.R
Original file line number Diff line number Diff line change
Expand Up @@ -151,21 +151,29 @@ Layout <- ggproto("Layout", NULL,
layout <- self$layout

lapply(data, function(layer_data) {
match_id <- match(layer_data$PANEL, layout$PANEL)
match_id <- NULL

# Loop through each variable, mapping across each scale, then joining
# back together
x_vars <- intersect(self$panel_scales_x[[1]]$aesthetics, names(layer_data))
names(x_vars) <- x_vars
SCALE_X <- layout$SCALE_X[match_id]
new_x <- scale_apply(layer_data, x_vars, "map", SCALE_X, self$panel_scales_x)
layer_data[, x_vars] <- new_x
if (length(x_vars) > 0) {
match_id <- match(layer_data$PANEL, layout$PANEL)
names(x_vars) <- x_vars
SCALE_X <- layout$SCALE_X[match_id]
new_x <- scale_apply(layer_data, x_vars, "map", SCALE_X, self$panel_scales_x)
layer_data[, x_vars] <- new_x
}

y_vars <- intersect(self$panel_scales_y[[1]]$aesthetics, names(layer_data))
names(y_vars) <- y_vars
SCALE_Y <- layout$SCALE_Y[match_id]
new_y <- scale_apply(layer_data, y_vars, "map", SCALE_Y, self$panel_scales_y)
layer_data[, y_vars] <- new_y
if (length(y_vars) > 0) {
if (is.null(match_id)) {
match_id <- match(layer_data$PANEL, layout$PANEL)
}
names(y_vars) <- y_vars
SCALE_Y <- layout$SCALE_Y[match_id]
new_y <- scale_apply(layer_data, y_vars, "map", SCALE_Y, self$panel_scales_y)
layer_data[, y_vars] <- new_y
}

layer_data
})
Expand Down

0 comments on commit a9e5d00

Please sign in to comment.