Skip to content

Commit d91200f

Browse files
committed
Use $setup_params() to prepare r_axis_inside
1 parent ac3349d commit d91200f

File tree

1 file changed

+37
-23
lines changed

1 file changed

+37
-23
lines changed

R/coord-radial.R

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -166,50 +166,45 @@ CoordRadial <- ggproto("CoordRadial", Coord,
166166
xlimits <- self$limits$r
167167
ylimits <- self$limits$theta
168168
}
169-
params <- c(
169+
panel_params <- c(
170170
view_scales_polar(scale_x, self$theta, xlimits,
171171
expand = params$expand[c(4, 2)]
172172
),
173173
view_scales_polar(scale_y, self$theta, ylimits,
174174
expand = params$expand[c(3, 1)]
175175
),
176176
list(bbox = polar_bbox(self$arc, inner_radius = self$inner_radius),
177-
arc = self$arc, inner_radius = self$inner_radius)
177+
arc = self$arc, inner_radius = self$inner_radius,
178+
r_axis_inside = params$r_axis_inside)
178179
)
179180

180-
params$r_axis_inside <- self$r_axis_inside
181-
if (isFALSE(self$r_axis_inside)) {
182-
place <- in_arc(c(0, 0.5, 1, 1.5) * pi, self$arc)
183-
if (!any(place)) {
184-
cli::cli_warn(c(
185-
"No appropriate placement found for {.arg r_axis_inside}.",
186-
i = "Axis will be placed at panel edge."
187-
))
188-
params$r_axis_inside <- TRUE
181+
if (isFALSE(panel_params$r_axis_inside)) {
182+
if (any(params$place[c(1, 3)])) {
183+
panel_params$r_axis <- "left"
189184
} else {
190-
params$r_axis <- if (any(place[c(1, 3)])) "left" else "bottom"
191-
params$fake_arc <- switch(
192-
which(place[c(1, 3, 2, 4)])[1],
193-
c(0, 2), c(1, 3), c(0.5, 2.5), c(1.5, 3.5)
194-
) * pi
185+
panel_params$r_axis <- "bottom"
195186
}
187+
panel_params$fake_arc <- switch(
188+
which(params$place[c(1, 3, 2, 4)])[1],
189+
c(0, 2), c(1, 3), c(0.5, 2.5), c(1.5, 3.5)
190+
) * pi
196191
}
197192

198-
axis_rotation <- params$r_axis_inside
193+
axis_rotation <- panel_params$r_axis_inside
199194
if (is.numeric(axis_rotation)) {
200195
theta_scale <- switch(self$theta, x = scale_x, y = scale_y)
201196
axis_rotation <- theta_scale$transform(axis_rotation)
202-
axis_rotation <- oob_squish(axis_rotation, params$theta.range)
197+
axis_rotation <- oob_squish(axis_rotation, panel_params$theta.range)
203198
axis_rotation <- theta_rescale(
204-
axis_rotation, params$theta.range,
205-
params$arc, 1
199+
axis_rotation, panel_params$theta.range,
200+
panel_params$arc, 1
206201
)
207-
params$axis_rotation <- rep_len(axis_rotation, length.out = 2)
202+
panel_params$axis_rotation <- rep_len(axis_rotation, length.out = 2)
208203
} else {
209-
params$axis_rotation <- params$arc
204+
panel_params$axis_rotation <- panel_params$arc
210205
}
211206

212-
params
207+
panel_params
213208
},
214209

215210
setup_panel_guides = function(self, panel_params, guides, params = list()) {
@@ -469,6 +464,25 @@ CoordRadial <- ggproto("CoordRadial", Coord,
469464

470465
lapply(scales_x, scale_flip_position)
471466
lapply(scales_y, scale_flip_position)
467+
},
468+
469+
setup_params = function(self, data) {
470+
params <- ggproto_parent(Coord, self)$setup_params(data)
471+
params$r_axis_inside <- self$r_axis_inside
472+
if (!isFALSE(params$r_axis_inside)) {
473+
return(params)
474+
}
475+
476+
place <- in_arc(c(0, 0.5, 1, 1.5) * pi, self$arc)
477+
if (!any(place)) {
478+
cli::cli_warn(c(
479+
"No appropriate placement found for {.arg r_axis_inside}.",
480+
i = "Axis will be placed at panel edge."
481+
))
482+
params$r_axis_inside <- TRUE
483+
}
484+
params$place <- place
485+
params
472486
}
473487
)
474488

0 commit comments

Comments
 (0)