@@ -160,8 +160,7 @@ draw_key_path <- function(data, params, size) {
160
160
} else {
161
161
data $ linetype [is.na(data $ linetype )] <- 0
162
162
}
163
-
164
- segmentsGrob(0.1 , 0.5 , 0.9 , 0.5 ,
163
+ grob <- segmentsGrob(0.1 , 0.5 , 0.9 , 0.5 ,
165
164
gp = gpar(
166
165
col = alpha(data $ colour %|| % data $ fill %|| % " black" , data $ alpha ),
167
166
fill = alpha(params $ arrow.fill %|| % data $ colour
@@ -172,12 +171,19 @@ draw_key_path <- function(data, params, size) {
172
171
),
173
172
arrow = params $ arrow
174
173
)
174
+ if (! is.null(params $ arrow )) {
175
+ angle <- deg2rad(params $ arrow $ angle )
176
+ length <- convertUnit(params $ arrow $ length , " cm" , valueOnly = TRUE )
177
+ attr(grob , " width" ) <- cos(angle ) * length * 1.25
178
+ attr(grob , " height" ) <- sin(angle ) * length * 2
179
+ }
180
+ grob
175
181
}
176
182
177
183
# ' @export
178
184
# ' @rdname draw_key
179
185
draw_key_vpath <- function (data , params , size ) {
180
- segmentsGrob(0.5 , 0.1 , 0.5 , 0.9 ,
186
+ grob <- segmentsGrob(0.5 , 0.1 , 0.5 , 0.9 ,
181
187
gp = gpar(
182
188
col = alpha(data $ colour %|| % data $ fill %|| % " black" , data $ alpha ),
183
189
lwd = (data $ linewidth %|| % 0.5 ) * .pt ,
@@ -186,6 +192,13 @@ draw_key_vpath <- function(data, params, size) {
186
192
),
187
193
arrow = params $ arrow
188
194
)
195
+ if (! is.null(params $ arrow )) {
196
+ angle <- deg2rad(params $ arrow $ angle )
197
+ length <- convertUnit(params $ arrow $ length , " cm" , valueOnly = TRUE )
198
+ attr(grob , " width" ) <- sin(angle ) * length * 2
199
+ attr(grob , " height" ) <- cos(angle ) * length * 1.25
200
+ }
201
+ grob
189
202
}
190
203
191
204
# ' @export
@@ -215,10 +228,14 @@ draw_key_linerange <- function(data, params, size) {
215
228
# ' @export
216
229
# ' @rdname draw_key
217
230
draw_key_pointrange <- function (data , params , size ) {
218
- grobTree(
219
- draw_key_linerange(data , params , size ),
231
+ linerange <- draw_key_linerange(data , params , size )
232
+ grob <- grobTree(
233
+ linerange ,
220
234
draw_key_point(transform(data , size = (data $ size %|| % 1.5 ) * 4 ), params )
221
235
)
236
+ attr(grob , " width" ) <- attr(linerange , " width" )
237
+ attr(grob , " height" ) <- attr(linerange , " height" )
238
+ grob
222
239
}
223
240
224
241
# ' @export
@@ -227,10 +244,15 @@ draw_key_smooth <- function(data, params, size) {
227
244
data $ fill <- alpha(data $ fill %|| % " grey60" , data $ alpha )
228
245
data $ alpha <- 1
229
246
230
- grobTree(
247
+ path <- draw_key_path(data , params , size )
248
+
249
+ grob <- grobTree(
231
250
if (isTRUE(params $ se )) rectGrob(gp = gpar(col = NA , fill = data $ fill )),
232
- draw_key_path( data , params , size )
251
+ path
233
252
)
253
+ attr(grob , " width" ) <- attr(path , " width" )
254
+ attr(grob , " height" ) <- attr(path , " height" )
255
+ grob
234
256
}
235
257
236
258
# ' @export
0 commit comments