121
121
# ' # reversed order legend
122
122
# ' p + guides(col = guide_legend(reverse = TRUE))
123
123
# ' }
124
- guide_legend <- function (# title
124
+ guide_legend <- function ( # title
125
125
title = waiver(),
126
126
title.position = NULL ,
127
127
title.theme = NULL ,
@@ -149,7 +149,6 @@ guide_legend <- function(# title
149
149
reverse = FALSE ,
150
150
order = 0 ,
151
151
... ) {
152
-
153
152
if (! is.null(keywidth ) && ! is.unit(keywidth )) {
154
153
keywidth <- unit(keywidth , default.unit )
155
154
}
@@ -264,7 +263,12 @@ guide_geom.legend <- function(guide, layers, default_mapping, theme) {
264
263
n <- vapply(layer $ aes_params , length , integer(1 ))
265
264
params <- layer $ aes_params [n == 1 ]
266
265
267
- data <- layer $ geom $ use_defaults(guide $ key [matched ], params , theme )
266
+ defaults <- layer $ geom $ eval_defaults(theme = theme )
267
+ data <- layer $ geom $ use_defaults(
268
+ data = guide $ key [matched ],
269
+ defaults = defaults ,
270
+ params = params
271
+ )
268
272
} else {
269
273
return (NULL )
270
274
}
@@ -274,7 +278,12 @@ guide_geom.legend <- function(guide, layers, default_mapping, theme) {
274
278
# Default is to exclude it
275
279
return (NULL )
276
280
} else {
277
- data <- layer $ geom $ use_defaults(NULL , layer $ aes_params )[rep(1 , nrow(guide $ key )), ]
281
+ defaults <- layer $ geom $ eval_defaults(theme = theme )
282
+ data <- layer $ geom $ use_defaults(
283
+ data = NULL ,
284
+ defaults = defaults ,
285
+ params = layer $ aes_params
286
+ )[rep(1 , nrow(guide $ key )), ]
278
287
}
279
288
}
280
289
@@ -301,8 +310,9 @@ guide_gengrob.legend <- function(guide, theme) {
301
310
302
311
# default setting
303
312
label.position <- guide $ label.position %|| % " right"
304
- if (! label.position %in% c(" top" , " bottom" , " left" , " right" ))
313
+ if (! label.position %in% c(" top" , " bottom" , " left" , " right" )) {
305
314
stop(" label position \" " , label.position , " \" is invalid" )
315
+ }
306
316
307
317
nbreak <- nrow(guide $ key )
308
318
@@ -313,7 +323,8 @@ guide_gengrob.legend <- function(guide, theme) {
313
323
title.hjust <- guide $ title.hjust %|| % theme $ legend.title.align %|| % title.theme $ hjust %|| % 0
314
324
title.vjust <- guide $ title.vjust %|| % title.theme $ vjust %|| % 0.5
315
325
316
- grob.title <- ggname(" guide.title" ,
326
+ grob.title <- ggname(
327
+ " guide.title" ,
317
328
element_grob(
318
329
title.theme ,
319
330
label = guide $ title ,
@@ -331,7 +342,7 @@ guide_gengrob.legend <- function(guide, theme) {
331
342
# gap between keys etc
332
343
# the default horizontal and vertical gap need to be the same to avoid strange
333
344
# effects for certain guide layouts
334
- hgap <- width_cm(theme $ legend.spacing.x %|| % (0.5 * unit(title_fontsize , " pt" )))
345
+ hgap <- width_cm(theme $ legend.spacing.x %|| % (0.5 * unit(title_fontsize , " pt" )))
335
346
vgap <- height_cm(theme $ legend.spacing.y %|| % (0.5 * unit(title_fontsize , " pt" )))
336
347
337
348
# Labels
@@ -391,7 +402,7 @@ guide_gengrob.legend <- function(guide, theme) {
391
402
key_sizes <- apply(key_size_mat , 1 , max )
392
403
393
404
if (! is.null(guide $ nrow ) && ! is.null(guide $ ncol ) &&
394
- guide $ nrow * guide $ ncol < nbreak ) {
405
+ guide $ nrow * guide $ ncol < nbreak ) {
395
406
stop(
396
407
" `nrow` * `ncol` needs to be larger than the number of breaks" ,
397
408
call. = FALSE
@@ -515,7 +526,8 @@ guide_gengrob.legend <- function(guide, theme) {
515
526
label.row = R * 2 - 1 ,
516
527
label.col = C * 4 - 1
517
528
)
518
- })
529
+ }
530
+ )
519
531
} else {
520
532
switch (
521
533
label.position ,
@@ -580,59 +592,65 @@ guide_gengrob.legend <- function(guide, theme) {
580
592
label.row = R ,
581
593
label.col = C * 4 - 1
582
594
)
583
- })
595
+ }
596
+ )
584
597
}
585
598
586
599
# layout the title over key-label
587
600
switch (guide $ title.position ,
588
- " top" = {
589
- widths <- c(kl_widths , max(0 , title_width - sum(kl_widths )))
590
- heights <- c(title_height , vgap , kl_heights )
591
- vps <- transform(
592
- vps ,
593
- key.row = key.row + 2 ,
594
- key.col = key.col ,
595
- label.row = label.row + 2 ,
596
- label.col = label.col
597
- )
598
- vps.title.row = 1 ; vps.title.col = 1 : length(widths )
599
- },
600
- " bottom" = {
601
- widths <- c(kl_widths , max(0 , title_width - sum(kl_widths )))
602
- heights <- c(kl_heights , vgap , title_height )
603
- vps <- transform(
604
- vps ,
605
- key.row = key.row ,
606
- key.col = key.col ,
607
- label.row = label.row ,
608
- label.col = label.col
609
- )
610
- vps.title.row = length(heights ); vps.title.col = 1 : length(widths )
611
- },
612
- " left" = {
613
- widths <- c(title_width , hgap , kl_widths )
614
- heights <- c(kl_heights , max(0 , title_height - sum(kl_heights )))
615
- vps <- transform(
616
- vps ,
617
- key.row = key.row ,
618
- key.col = key.col + 2 ,
619
- label.row = label.row ,
620
- label.col = label.col + 2
621
- )
622
- vps.title.row = 1 : length(heights ); vps.title.col = 1
623
- },
624
- " right" = {
625
- widths <- c(kl_widths , hgap , title_width )
626
- heights <- c(kl_heights , max(0 , title_height - sum(kl_heights )))
627
- vps <- transform(
628
- vps ,
629
- key.row = key.row ,
630
- key.col = key.col ,
631
- label.row = label.row ,
632
- label.col = label.col
633
- )
634
- vps.title.row = 1 : length(heights ); vps.title.col = length(widths )
635
- })
601
+ " top" = {
602
+ widths <- c(kl_widths , max(0 , title_width - sum(kl_widths )))
603
+ heights <- c(title_height , vgap , kl_heights )
604
+ vps <- transform(
605
+ vps ,
606
+ key.row = key.row + 2 ,
607
+ key.col = key.col ,
608
+ label.row = label.row + 2 ,
609
+ label.col = label.col
610
+ )
611
+ vps.title.row <- 1
612
+ vps.title.col <- 1 : length(widths )
613
+ },
614
+ " bottom" = {
615
+ widths <- c(kl_widths , max(0 , title_width - sum(kl_widths )))
616
+ heights <- c(kl_heights , vgap , title_height )
617
+ vps <- transform(
618
+ vps ,
619
+ key.row = key.row ,
620
+ key.col = key.col ,
621
+ label.row = label.row ,
622
+ label.col = label.col
623
+ )
624
+ vps.title.row <- length(heights )
625
+ vps.title.col <- 1 : length(widths )
626
+ },
627
+ " left" = {
628
+ widths <- c(title_width , hgap , kl_widths )
629
+ heights <- c(kl_heights , max(0 , title_height - sum(kl_heights )))
630
+ vps <- transform(
631
+ vps ,
632
+ key.row = key.row ,
633
+ key.col = key.col + 2 ,
634
+ label.row = label.row ,
635
+ label.col = label.col + 2
636
+ )
637
+ vps.title.row <- 1 : length(heights )
638
+ vps.title.col <- 1
639
+ },
640
+ " right" = {
641
+ widths <- c(kl_widths , hgap , title_width )
642
+ heights <- c(kl_heights , max(0 , title_height - sum(kl_heights )))
643
+ vps <- transform(
644
+ vps ,
645
+ key.row = key.row ,
646
+ key.col = key.col ,
647
+ label.row = label.row ,
648
+ label.col = label.col
649
+ )
650
+ vps.title.row <- 1 : length(heights )
651
+ vps.title.col <- length(widths )
652
+ }
653
+ )
636
654
637
655
# grob for key
638
656
key_size <- c(key_width , key_height ) * 10
@@ -738,9 +756,7 @@ label_just_defaults.legend <- function(direction, position) {
738
756
" left" = list (hjust = 1 , vjust = 0.5 ),
739
757
list (hjust = 0 , vjust = 0.5 )
740
758
)
741
-
742
759
}
743
-
744
760
}
745
761
746
762
0 commit comments