Skip to content

Commit 3ea7b2c

Browse files
committed
use rlang::exec() for function calls whose argument names vary with axis position
1 parent 746a125 commit 3ea7b2c

File tree

1 file changed

+28
-39
lines changed

1 file changed

+28
-39
lines changed

R/guides-axis.r

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,11 @@ draw_axis <- function(break_positions, break_labels, axis_position, theme) {
5555
axis_position_opposite <- unname(opposite_positions[axis_position])
5656

5757
# draw elements
58-
line_coords <- list(
59-
position = unit(c(0, 1), "npc"),
60-
non_position = unit.c(non_position_panel, non_position_panel)
58+
line_grob <- exec(
59+
element_grob, line_element,
60+
!!position_dim := unit(c(0, 1), "npc"),
61+
!!non_position_dim := unit.c(non_position_panel, non_position_panel)
6162
)
62-
names(line_coords) <- c(position_dim, non_position_dim)
63-
line_grob <- do.call(element_grob, c(list(line_element), line_coords))
6463

6564
if (n_breaks == 0) {
6665
return(
@@ -72,55 +71,45 @@ draw_axis <- function(break_positions, break_labels, axis_position, theme) {
7271
)
7372
}
7473

75-
label_coords <- list(
76-
position = unit(break_positions, "native"),
77-
label = break_labels,
78-
margin = TRUE
74+
labels_grob <- exec(
75+
element_grob, label_element,
76+
!!position_dim := unit(break_positions, "native"),
77+
!!label_margin_name := TRUE,
78+
label = break_labels
7979
)
8080

81-
tick_coords <- list(
82-
position = rep(label_coords$position, each = 2),
83-
non_position = rep(
81+
ticks_grob <- exec(
82+
element_grob, tick_element,
83+
!!position_dim := rep(unit(break_positions, "native"), each = 2),
84+
!!non_position_dim := rep(
8485
unit.c(non_position_panel + (tick_direction * tick_length), non_position_panel)[tick_coordinate_order],
8586
times = n_breaks
8687
),
8788
id.lengths = rep(2, times = n_breaks)
8889
)
8990

90-
names(label_coords) <- c(position_dim, "label", label_margin_name)
91-
names(tick_coords) <- c(position_dim, non_position_dim, "id.lengths")
91+
# create gtable
92+
table_order_int <- match(table_order, c("labels", "ticks"))
93+
non_position_sizes <- paste0(non_position_size, "s")
9294

93-
grobs <- list(
94-
line = line_grob,
95-
labels = do.call(element_grob, c(list(label_element), label_coords)),
96-
ticks = do.call(element_grob, c(list(tick_element), tick_coords))
97-
)
98-
99-
# assemble elements
100-
gt_element_order <- match(table_order, c("labels", "ticks"))
101-
gt_dims <- list(
102-
dims = unit.c(measure_labels(grobs$labels), tick_length),
103-
dim = unit(1, "npc")
104-
)
105-
gt_dims$dims <- gt_dims$dims[gt_element_order]
106-
names(gt_dims) <- c(paste0(non_position_size, "s"), position_size)
107-
108-
gt <- do.call(
95+
gt <- exec(
10996
gtable_element,
110-
c(list(name = "axis", grobs = grobs[table_order]), gt_dims)
97+
name = "axis",
98+
grobs = list(labels_grob, ticks_grob)[table_order_int],
99+
!!non_position_sizes := unit.c(measure_labels(labels_grob), tick_length)[table_order_int],
100+
!!position_size := unit(1, "npc")
111101
)
112102

113-
justvp_args <- list(
114-
non_position_dim = non_position_panel,
115-
just = axis_position_opposite,
116-
non_position_size = measure_gtable(gt)
103+
# create viewport
104+
justvp <- exec(
105+
viewport,
106+
!!non_position_dim := non_position_panel,
107+
!!non_position_size := measure_gtable(gt),
108+
just = axis_position_opposite
117109
)
118-
names(justvp_args) <- c(non_position_dim, "just", non_position_size)
119-
120-
justvp <- do.call(viewport, justvp_args)
121110

122111
absoluteGrob(
123-
gList(grobs$line, gt),
112+
gList(line_grob, gt),
124113
width = gtable_width(gt),
125114
height = gtable_height(gt),
126115
vp = justvp

0 commit comments

Comments
 (0)