Skip to content

Commit 3297f8d

Browse files
committed
fix higlight working + formatting
1 parent 979681f commit 3297f8d

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

R/ggridges.R

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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
242245
geom2trace.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

Comments
 (0)