Выделите все значения из группы при наведении - PullRequest
0 голосов
/ 27 сентября 2018

Предположим, данные

library(ggplot2)
library(plotly)

set.seed(357)
xy <- data.frame(letters = rep(c("a", "b", "c"), times = 3),
                 values = runif(9),
                 groups = rep(c("group1", "group2", "group3"), each = 3))

  letters    values groups
1       a 0.9913409 group1
2       b 0.6245529 group1
3       c 0.5245744 group1
4       a 0.4601817 group2
5       b 0.2254525 group2
6       c 0.5898001 group2
7       a 0.1716801 group3
8       b 0.3195294 group3
9       c 0.8953055 group3

ggplotly(
  ggplot(xy, aes(x = letters, y = values, group = groups)) +
  theme_bw() +
  geom_point()
)

Моя цель - при наведении курсора выделить все точки, принадлежащие к одной группе.Например, при наведении курсора на точку в верхнем правом углу все точки этой группы (кружки) станут красными.Нечто подобное можно достичь с помощью layout(hovermode = "x"), но только если вы заинтересованы в выделении всех точек на одной из осей.Я хотел бы, чтобы такое же поведение было для пользовательских переменных, отличных от x, y или closest (которые являются режимами hovermode).

enter image description here

1 Ответ

0 голосов
/ 08 октября 2018

это, вероятно, подойдет вашим потребностям

пример данных

set.seed(357)
xy <- data.frame(letters = rep(c("a", "b", "c"), times = 3),
                 values = runif(9),
                 groups = rep(c("group1", "group2", "group3"), each = 3))

построение графика

#create a SharedData object for use in the ggplot below, group by 'groups' 
d <- highlight_key(xy, ~groups )

#create a normal ggplot to fit your needs, but use the SharedData object as data for the chart
p <- ggplot( d, aes(x = letters, y = values, group = groups)) + theme_bw() + geom_point()

#now ggplotly the newly created ggplot, and add text for the tooltips as needed
gg <- ggplotly( p, tooltip = "groups" )

#set the highlight-options to your liking, and plot...
highlight( gg, on = "plotly_hover", off = "plotly_deselect", color = "red" )

результаты сюжета

enter image description here

...