@@ -100,6 +100,7 @@ Facet <- ggproto("Facet", NULL,
100
100
return (data )
101
101
}
102
102
103
+ grid_layout <- all(c(" rows" , " cols" ) %in% names(params ))
103
104
layer_layout <- attr(data , " layout" )
104
105
if (identical(layer_layout , " fixed" )) {
105
106
n <- vec_size(data )
@@ -112,8 +113,7 @@ Facet <- ggproto("Facet", NULL,
112
113
facet_vals <- eval_facets(vars , data , params $ .possible_columns )
113
114
114
115
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
117
117
if (include_margins ) {
118
118
# Margins are computed on evaluated faceting values (#1864).
119
119
facet_vals <- reshape_add_margins(
@@ -129,6 +129,17 @@ Facet <- ggproto("Facet", NULL,
129
129
facet_vals $ .index <- NULL
130
130
}
131
131
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
+
132
143
# If any faceting variables are missing, add them in by
133
144
# duplicating the data
134
145
missing_facets <- setdiff(names(vars ), names(facet_vals ))
0 commit comments