@@ -121,7 +121,7 @@ layer2traces <- function(l, d, misc) {
121
121
}
122
122
# # Then split on visual characteristics that will get different
123
123
# # legend entries.
124
- data.list <- if (basic $ geom %in% names(markLegends )){
124
+ data.list <- if (basic $ geom %in% names(markLegends )) {
125
125
mark.names <- markLegends [[basic $ geom ]]
126
126
# # However, continuously colored points are an exception: they do
127
127
# # not need a legend entry, and they can be efficiently rendered
@@ -152,11 +152,24 @@ layer2traces <- function(l, d, misc) {
152
152
}
153
153
}
154
154
155
+ # Split hline and vline when multiple
156
+ if (g $ geom == " hline" || g $ geom == " vline" ) {
157
+ if (nrow(g $ data ) > 1 ) {
158
+ df.list <- split(basic $ data , rep(1 : nrow(g $ data ))) # , drop=TRUE)
159
+ data.list <- lapply(df.list , function (df ) {
160
+ params <- basic $ params
161
+ list (data = df ,
162
+ params = params )
163
+ })
164
+ }
165
+ }
166
+
155
167
# # case of no legend, if either of the two ifs above failed.
156
168
if (is.null(data.list )){
157
169
data.list <- structure(list (list (data = basic $ data , params = basic $ params )),
158
170
names = basic $ params $ name )
159
171
}
172
+
160
173
getTrace <- geom2trace [[basic $ geom ]]
161
174
if (is.null(getTrace )){
162
175
warning(" Conversion not implemented for geom_" ,
@@ -167,7 +180,8 @@ layer2traces <- function(l, d, misc) {
167
180
}
168
181
traces <- NULL
169
182
names.in.legend <- NULL
170
- for (data.i in seq_along(data.list )){
183
+
184
+ for (data.i in seq_along(data.list )) {
171
185
data.params <- data.list [[data.i ]]
172
186
data.params $ params $ stat.type <- l $ stat $ objname
173
187
tr <- do.call(getTrace , data.params )
@@ -303,6 +317,11 @@ toBasic <- list(
303
317
g $ params $ xend <- max(g $ prestats.data $ globxmax )
304
318
g
305
319
},
320
+ vline = function (g ) {
321
+ g $ params $ ystart <- min(g $ prestats.data $ globymin )
322
+ g $ params $ yend <- max(g $ prestats.data $ globymax )
323
+ g
324
+ },
306
325
point = function (g ) {
307
326
if (" size" %in% names(g $ data )) {
308
327
g $ params $ sizemin <- min(g $ prestats.data $ globsizemin )
@@ -527,5 +546,13 @@ geom2trace <- list(
527
546
type = " scatter" ,
528
547
mode = " lines" ,
529
548
line = paramORdefault(params , aes2line , line.defaults ))
549
+ },
550
+ vline = function (data , params ) {
551
+ list (x = c(data $ xintercept , data $ xintercept ),
552
+ y = c(params $ ystart , params $ yend ),
553
+ name = params $ name ,
554
+ type = " scatter" ,
555
+ mode = " lines" ,
556
+ line = paramORdefault(params , aes2line , line.defaults ))
530
557
}
531
558
)
0 commit comments