Как адаптировать вариант «x» для графического режима hovermode для работы без дополнительной эстетики и с перекрывающимися координатами? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь повторить hovermode, показанный в этом графическом примере в 33.1:

, где он дает вам только информацию о конкретной c x координате в hover, но с несколькими записями.

В моем реальном наборе данных я не устанавливаю никакой дополнительной эстетики, кроме text, так как мне нужна дополнительная информация в hover. В моем наборе данных есть несколько записей для некоторых координат х, как в примере. Однако, когда я пытаюсь адаптировать код для моего реального набора данных:

p <- ggplot(df, mapping = aes(x, Points, text = paste("Person: ", Person,
                                                      "\nEvent: ", Event))) +
  # geom_jitter(shape = 4, width = 0, height = 50) +
  geom_point(shape = 4) +

ggplotly(p) %>%
  layout(hovermode = "x")

enter image description here

Наведение для определенной c x координаты сейчас показывает только один человек. Я попытался сместить точки по вертикали, чтобы посмотреть, изменится ли это, поскольку я читал, что у точек с наложением часто возникают проблемы, но это не решает мою проблему.

Я пытался установить цветную эстетику c, просто чтобы проверить, как это будет выглядеть:

p <- ggplot(df, mapping = aes(x, Points, colour = Event, text = paste("Person: ", Person,
                                                      "\nEvent: ", Event))) +
  geom_point(shape = 4)
ggplotly(p) %>%
  layout(hovermode = "x")

enter image description here

Я могу легко избавиться от легенды и сделать так, чтобы все цвета установлены на один цвет, но здесь при наведении курсора отображаются значения из нескольких координат х, что порождает другую проблему.

Требуемый вывод при координате х 1090:

enter image description here

My df:

df <- structure(list(Event = c("2012", "2008", "2005", "2012", "2018", "2005", "2009", "2018", "2013", "2016", "2007", "2000", "2017", "2000", "2000", "2015", "2004", "2012", "2002", "2015", "2017", "2016", "2018", "2013", "2005", "2015", "2001", "2000", "2008", "2004", "2012", "2003", "2016", "2015", "2007", "2009", "2006", "2011", "2016", "2001", "2018", "2010", "2011", "2016", "2005", "2017", "2004", "2004", "2009", "2004", "2015", "2002", "2012", "2001", "2006", "2004", "2014", "2012", "2003", "2008", "2007", "2015", "2009", "2011"), x = c(1106, 1124, 1090, 1110, 1090, 1107, 1066, 1112, 1098, 1096, 1121, 1121, 1094, 1121, 1131, 1105, 1106, 1109, 1083, 1097, 1093, 1062, 1082, 1105, 1067, 1122, 1099, 1075, 1113, 1108, 1090, 1072, 1130, 1127, 1086, 1089, 1114, 1111, 1117, 1072, 1129, 1135, 1128, 1086, 1081, 1126, 1086, 1050, 1093, 1055, 1126, 1089, 1035, 1074, 1083, 1066, 1050, 1078, 1075, 1115, 1104, 1093, 1088, 1125), Points = c(847, 808, 883, 838, 883, 845, 938, 834, 865, 870, 814, 814, 874, 814, 793, 850, 847, 841, 899, 867, 876, 947, 901, 850, 935, 812, 863, 917, 832, 843, 883, 924, 795, 801, 892, 885, 830, 836, 823, 924, 797, 784, 799, 892, 903, 804, 892, 975, 876, 963, 804, 885, 1011, 919, 899, 938, 975, 910, 917, 827, 852, 876, 888, 806), Person = c("Pascal", "Hans", "Attila", "Brent", "Fredrik", "Óscar", "Yunior", "Pieter", "Sergey", "Adam", "Nicklas", "Fedor", "Marek", "Michael", "Indrek", "Simone", "Qi", "Willem", "Eugenio", "Pieter", "Devon", "Kai", "Martin", "Adam", "Hamdi", "Bastien", "Eduard", "Lev", "Aleksey", "Indrek", "Norman", "Dmitriy", "Keisuke", "Keisuke", "Andrei", "Eelco", "Andrei", "Kim", "Jonas", "Dean", "Niklas", "Petter", "Mikk", "Cedric", "Christopher", "Gael", "Markus", "Dmitriy", "Norman", "Nikolay", "Pau", "Thomas", "Ashton", "Lev", "Maurice", "Chiel", "Trey", "Sergey", "Markus", "Mikk", "Roman", "Ingmar", "Pascal", "Roman")), row.names = c(NA, -64L), class = "data.frame")

1 Ответ

1 голос
/ 23 апреля 2020

Попробуйте установить расстояние при наведении

p <- ggplot(df, mapping = aes(x, Points, colour = Event, text = paste("Person: ", Person,
                                                                      "\nEvent: ", Event))) +
  theme(legend.position='none')+
  geom_point(shape = 4)
ggplotly(p) %>%
  layout(hovermode = "x", hoverdistance = 1)

enter image description here

...