@@ -30,8 +30,7 @@ get_ridge_data <- function(data, na.rm) {
3030# ' Prepare plotting data for ggridges
3131# ' @param closed boolean, should the polygon be closed at bottom (TRUE for
3232# ' geom_density_ridges2, FALSE for geom_density_ridges)
33- prepare_ridge_chart <- function (data , prestats_data , layout , params , p , closed = FALSE , ... ){
34-
33+ prepare_ridge_chart <- function (data , prestats_data , layout , params , p , closed = FALSE , ... ) {
3534 d <- get_ridge_data(data , params $ na.rm )
3635
3736 # split data into separate groups
@@ -52,25 +51,27 @@ prepare_ridge_chart <- function(data, prestats_data, layout, params, p, closed =
5251 # for each group create a density + vline + point as applicable
5352 res <- lapply(
5453 rev(groups ),
55- function (x ){
56-
54+ function (x ) {
5755 draw_stuff <- split(x , x $ datatype )
5856
5957 # first draw the basic density ridge part
60-
6158 stopifnot(! is.null(draw_stuff $ ridgeline ))
59+
6260 d2 <- d1 <- draw_stuff $ ridgeline
63- if (! closed ) d2 $ colour <- NA # no colour for density bottom line
61+ if (! closed ) d2 $ colour <- NA # no colour for density bottom line
6462
6563 d1 $ y <- d1 $ ymax
6664 d1 $ alpha <- 1 # don't use fill alpha for line alpha
65+
6766 ridges <- list (
6867 to_basic(prefix_class(d2 , " GeomDensity" )),
6968 to_basic(prefix_class(d1 , " GeomLine" ))
7069 )
70+ # attach the crosstalk group/set
71+ ridges [[1 ]] <- structure(ridges [[1 ]], set = attr(d2 , ' set' )) # Density
72+ ridges [[2 ]] <- structure(ridges [[2 ]], set = attr(d1 , ' set' )) # Line
7173
72- if (' vline' %in% names(draw_stuff )){
73-
74+ if (' vline' %in% names(draw_stuff )) {
7475 draw_stuff $ vline $ xend <- draw_stuff $ vline $ x
7576 draw_stuff $ vline $ yend <- draw_stuff $ vline $ ymax
7677 draw_stuff $ vline $ y <- draw_stuff $ vline $ ymin
@@ -81,12 +82,13 @@ prepare_ridge_chart <- function(data, prestats_data, layout, params, p, closed =
8182 prefix_class(draw_stuff $ vline , ' GeomSegment' ),
8283 prestats_data , layout , params , p , ...
8384 )
85+ # attach the crosstalk group/set
86+ vlines <- structure(vlines , set = attr(draw_stuff $ vline , ' set' ))
8487 ridges <- c(ridges , list (vlines ))
85-
8688 }
8789
8890 # points
89- if (' point' %in% names(draw_stuff )){
91+ if (' point' %in% names(draw_stuff )) {
9092 draw_stuff $ point $ y <- draw_stuff $ point $ ymin
9193
9294 # use point aesthetics
@@ -102,6 +104,8 @@ prepare_ridge_chart <- function(data, prestats_data, layout, params, p, closed =
102104 ' GeomPoint' ),
103105 prestats_data , layout , params , p , ...
104106 )
107+ # attach the crosstalk group/set
108+ points <- structure(points , set = attr(draw_stuff $ point , ' set' ))
105109 ridges <- c(ridges , list (points ))
106110 }
107111
@@ -113,8 +117,7 @@ prepare_ridge_chart <- function(data, prestats_data, layout, params, p, closed =
113117
114118
115119# ' @export
116- to_basic.GeomDensityRidgesGradient <- function (data , prestats_data , layout , params , p , ... ){
117-
120+ to_basic.GeomDensityRidgesGradient <- function (data , prestats_data , layout , params , p , ... ) {
118121 res <- prepare_ridge_chart(data , prestats_data , layout , params , p , FALSE , ... )
119122 # set list depth to 1
120123 unlist(res , recursive = FALSE )
@@ -182,7 +185,7 @@ to_basic.GeomRidgelineGradient <- function(data, prestats_data, layout, params,
182185 # for each group create a density + vline + point as applicable
183186 res <- lapply(
184187 rev(groups ),
185- function (x ){
188+ function (x ) {
186189
187190 draw_stuff <- split(x , x $ datatype )
188191
@@ -211,7 +214,7 @@ to_basic.GeomRidgelineGradient <- function(data, prestats_data, layout, params,
211214 # rows to be duplicated
212215 dupl_rows <- which(fillchange & ! idchange )
213216 d2 $ y <- d2 $ ymax
214- if (length(dupl_rows )> 0 ) {
217+ if (length(dupl_rows ) > 0 ) {
215218 rows <- d2 [dupl_rows , ]
216219 rows $ ids <- d2 $ ids [dupl_rows - 1 ]
217220 rows <- rows [rev(seq_len(nrow(rows ))), , drop = FALSE ]
@@ -240,12 +243,11 @@ to_basic.GeomRidgelineGradient <- function(data, prestats_data, layout, params,
240243
241244# ' @export
242245geom2trace.GeomRidgelineGradient <- function (data , params , p ) {
243-
244246 # munching for polygon
245- positions <- with( data , data.frame (
246- x = c(x , rev(x )),
247- y = c(ymax , rev(ymin ))
248- ))
247+ positions <- data.frame (
248+ x = c(data $ x , rev(data $ x )),
249+ y = c(data $ ymax , rev(data $ ymin ))
250+ )
249251
250252 L <- list (
251253 x = positions [[" x" ]],
0 commit comments