Skip to content

Commit f7feb8c

Browse files
committed
Implement keywords for fixing rows / columns
1 parent 8d9d955 commit f7feb8c

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

R/facet-.R

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ Facet <- ggproto("Facet", NULL,
100100
return(data)
101101
}
102102

103+
grid_layout <- all(c("rows", "cols") %in% names(params))
103104
layer_layout <- attr(data, "layout")
104105
if (identical(layer_layout, "fixed")) {
105106
n <- vec_size(data)
@@ -112,8 +113,7 @@ Facet <- ggproto("Facet", NULL,
112113
facet_vals <- eval_facets(vars, data, params$.possible_columns)
113114

114115
include_margins <- !isFALSE(params$margin %||% FALSE) &&
115-
nrow(facet_vals) == nrow(data) &&
116-
all(c("rows", "cols") %in% names(params))
116+
nrow(facet_vals) == nrow(data) && grid_layout
117117
if (include_margins) {
118118
# Margins are computed on evaluated faceting values (#1864).
119119
facet_vals <- reshape_add_margins(
@@ -129,6 +129,17 @@ Facet <- ggproto("Facet", NULL,
129129
facet_vals$.index <- NULL
130130
}
131131

132+
# If we need to fix rows or columns, we make the corresponding faceting
133+
# variables missing on purpose
134+
if (grid_layout) {
135+
if (identical(layer_layout, "fixed_rows")) {
136+
facet_vals <- facet_vals[setdiff(names(facet_vals), names(params$cols))]
137+
}
138+
if (identical(layer_layout, "fixed_cols")) {
139+
facet_vals <- facet_vals[setdiff(names(facet_vals), names(params$rows))]
140+
}
141+
}
142+
132143
# If any faceting variables are missing, add them in by
133144
# duplicating the data
134145
missing_facets <- setdiff(names(vars), names(facet_vals))

0 commit comments

Comments
 (0)