Skip to content

Commit 617c336

Browse files
authored
Restore legend.byrow (#5662)
* add `elements` to `arrange_layout` * Fix `byrow` * add test
1 parent 87abade commit 617c336

File tree

6 files changed

+100
-13
lines changed

6 files changed

+100
-13
lines changed

R/guide-.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ Guide <- ggproto(
329329

330330
# Arrange and assemble grobs
331331
sizes <- self$measure_grobs(grobs, params, elems)
332-
layout <- self$arrange_layout(key, sizes, params)
332+
layout <- self$arrange_layout(key, sizes, params, elems)
333333
self$assemble_drawing(grobs, layout, sizes, params, elems)
334334
},
335335

@@ -340,7 +340,7 @@ Guide <- ggproto(
340340
},
341341

342342
# Takes care of where grobs should be added to the output gtable.
343-
arrange_layout = function(key, sizes, params) {
343+
arrange_layout = function(key, sizes, params, elements) {
344344
return(invisible())
345345
},
346346

R/guide-axis-theta.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ GuideAxisTheta <- ggproto(
306306
list(offset = max(height))
307307
},
308308

309-
arrange_layout = function(key, sizes, params) {
309+
arrange_layout = function(key, sizes, params, elements) {
310310
NULL
311311
},
312312

R/guide-axis.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ GuideAxis <- ggproto(
386386
sizes
387387
},
388388

389-
arrange_layout = function(key, sizes, params) {
389+
arrange_layout = function(key, sizes, params, elements) {
390390

391391
layout <- seq_along(sizes)
392392

R/guide-legend.R

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -471,21 +471,16 @@ GuideLegend <- ggproto(
471471
)
472472
heights <- head(vec_interleave(!!!heights), -1)
473473

474-
list(
475-
widths = widths,
476-
heights = heights,
477-
padding = elements$padding,
478-
label_position = elements$text_position
479-
)
474+
list(widths = widths, heights = heights)
480475
},
481476

482-
arrange_layout = function(key, sizes, params) {
477+
arrange_layout = function(key, sizes, params, elements) {
483478

484479
break_seq <- seq_len(params$n_breaks %||% 1L)
485480
dim <- c(params$nrow %||% 1L, params$ncol %||% 1L)
486481

487482
# Find rows / columns of legend items
488-
if (params$byrow %||% FALSE) {
483+
if (elements$byrow %||% FALSE) {
489484
row <- ceiling(break_seq / dim[2L])
490485
col <- (break_seq - 1L) %% dim[2L] + 1L
491486
} else {
@@ -497,7 +492,7 @@ GuideLegend <- ggproto(
497492
key_col <- col * 2 - 1
498493

499494
# Make gaps for key-label spacing depending on label position
500-
position <- sizes$label_position
495+
position <- elements$text_position
501496
key_row <- key_row + switch(position, top = row, bottom = row - 1, 0)
502497
lab_row <- key_row + switch(position, top = -1, bottom = 1, 0)
503498
key_col <- key_col + switch(position, left = col, right = col - 1, 0)
Lines changed: 75 additions & 0 deletions
Loading

tests/testthat/test-guides.R

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,23 @@ test_that("guides() warns if unnamed guides are provided", {
11611161
expect_null(guides())
11621162
})
11631163

1164+
test_that("legend.byrow works in `guide_legend()`", {
1165+
1166+
df <- data.frame(x = 1:6, f = LETTERS[1:6])
1167+
1168+
p <- ggplot(df, aes(x, x, colour = f)) +
1169+
geom_point() +
1170+
scale_colour_discrete(
1171+
guide = guide_legend(
1172+
ncol = 3,
1173+
theme = theme(legend.byrow = TRUE)
1174+
)
1175+
)
1176+
1177+
expect_doppelganger("legend.byrow = TRUE", p)
1178+
1179+
})
1180+
11641181
test_that("old S3 guides can be implemented", {
11651182

11661183
my_env <- env()

0 commit comments

Comments
 (0)