简体   繁体   中英

Show other data points when using ggiraph in R?

I am using ggiraph to make an interactive plot in R. My data is grouped and what I'm hoping to do is plot just the mean value of the group but when I hover over that point in the plot, the other points appear. Hopefully, my example below will explain what I mean.

To begin I create some data and make a basic plot:

library(ggplot2)
library(ggiraph)
# create some data
dat1 <- data.frame(X=rnorm(21),
                   Y=rnorm(21),
                   groupID=rep(1,21))
dat2 <- data.frame(X=rnorm(21,5),
                   Y=rnorm(21,5),
                   groupID=rep(2,21))
dat3 <- data.frame(X=rnorm(21,10),
                   Y=rnorm(21,10),
                   groupID=rep(3,21))

ggdat <- rbind(dat1,dat2,dat3)
ggdat$groupID <- as.factor(ggdat$groupID)

# create a plot
ggplot(ggdat, aes(X,Y)) +
  geom_point(aes(color = groupID)) +
  theme(legend.position = 'none')

分组图的例子

We can see the 3 different groups in the above plot. Then, I'm finding the mean value of each group and plot that. In the example plot below, I'm also plotting all the points with a low alpha value and the mean point in black.

library(dplyr)
# create mean data frame
dfMean <- ggdat %>%
  group_by(groupID) %>%
  dplyr::summarize(mX = mean(X), mY = mean(Y))

gg_scatter <- ggplot(dfMean, aes(mX, mY, tooltip = groupID, data_id = groupID)) +
  geom_point(data = ggdat, aes(X,Y), alpha = 0.1, color = ggdat$groupID) +
  theme(legend.position = 'none') +
  geom_point_interactive() 
gg_scatter

突出显示平均点的示例图

What I'm hoping to do is when I hover over one of the black points, it changes the alpha value for that group to, say, alpha = 1 and shows all the points for that group.

Naively I just tried:

girafe(ggobj = gg_scatter,
       options = list(
         opts_hover_inv(css = "opacity:0.5;"),
         opts_hover(css = "fill:red;")
       ) )

but this will just highlight the mean point that I'm hovering over and changes the other mean values points alpha.

Is there a way to hover over the mean value point, which changes the alpha for that particular group?

I am not sure if I answer correctly, but I hope it could help:

In your code, you did not use geom_point_interactive() when plotting the first points, so they can not be interactive.

library(ggplot2)
library(ggiraph)
# create some data
dat1 <- data.frame(X=rnorm(21),
                   Y=rnorm(21),
                   groupID=rep(1,21))
dat2 <- data.frame(X=rnorm(21,5),
                   Y=rnorm(21,5),
                   groupID=rep(2,21))
dat3 <- data.frame(X=rnorm(21,10),
                   Y=rnorm(21,10),
                   groupID=rep(3,21))

ggdat <- rbind(dat1,dat2,dat3)
ggdat$groupID <- as.factor(ggdat$groupID)

library(dplyr)
# create mean data frame
dfMean <- ggdat %>%
  group_by(groupID) %>%
  dplyr::summarize(mX = mean(X), mY = mean(Y))

gg_scatter <- ggplot(dfMean, aes(mX, mY, tooltip = groupID, data_id = groupID)) +
  geom_point_interactive(data = ggdat, aes(X,Y, color = groupID), alpha = 0.9) +
  theme(legend.position = 'none') +
  geom_point_interactive() 
gg_scatter

girafe(ggobj = gg_scatter,
       options = list(
         opts_hover_inv(css = "opacity:0.1;"),
         opts_hover(css = "fill:red;")
       ) )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM