@@ -166,50 +166,45 @@ CoordRadial <- ggproto("CoordRadial", Coord,
166
166
xlimits <- self $ limits $ r
167
167
ylimits <- self $ limits $ theta
168
168
}
169
- params <- c(
169
+ panel_params <- c(
170
170
view_scales_polar(scale_x , self $ theta , xlimits ,
171
171
expand = params $ expand [c(4 , 2 )]
172
172
),
173
173
view_scales_polar(scale_y , self $ theta , ylimits ,
174
174
expand = params $ expand [c(3 , 1 )]
175
175
),
176
176
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 )
178
179
)
179
180
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"
189
184
} 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"
195
186
}
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
196
191
}
197
192
198
- axis_rotation <- params $ r_axis_inside
193
+ axis_rotation <- panel_params $ r_axis_inside
199
194
if (is.numeric(axis_rotation )) {
200
195
theta_scale <- switch (self $ theta , x = scale_x , y = scale_y )
201
196
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 )
203
198
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
206
201
)
207
- params $ axis_rotation <- rep_len(axis_rotation , length.out = 2 )
202
+ panel_params $ axis_rotation <- rep_len(axis_rotation , length.out = 2 )
208
203
} else {
209
- params $ axis_rotation <- params $ arc
204
+ panel_params $ axis_rotation <- panel_params $ arc
210
205
}
211
206
212
- params
207
+ panel_params
213
208
},
214
209
215
210
setup_panel_guides = function (self , panel_params , guides , params = list ()) {
@@ -469,6 +464,25 @@ CoordRadial <- ggproto("CoordRadial", Coord,
469
464
470
465
lapply(scales_x , scale_flip_position )
471
466
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
472
486
}
473
487
)
474
488
0 commit comments