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

У меня есть данные с группами. Для каждой группы я строю участок сюжета. Значения x для всех этих подзаголовков соответствуют одинаковому описанию, только значение оси Y либо отсутствует, либо различается по группам. Я хотел бы связать эти подзаголовки, чтобы, если я наведу курсор на одну точку на одном подзаголовке, он также выделит точки с таким же значением x в других подзаголовках. Я пробовал примеры пакетов с перекрестными помехами, но либо я неправильно создаю подзаголовки, либо не понимаю, как их использовать. Есть у кого-нибудь опыт?

Обновлять:

df <- data.frame(
     ID = rep(1:4, times = 2), 
     Value = rnorm(8),
     group = c(1,1,1,1,2,2,2,2)
 )

subplot(
     plot_ly(df[df$group==1,], x = ~ID, y = ~Value),
     plot_ly(df[df$group==2,], x = ~ID, y = ~Value), nrows = 2
 )

И мой вопрос: как я могу выделить точки с одинаковым значением x на всех подзаголовках, если я наведу курсор на одну из точек?


person Liis Kolberg    schedule 06.02.2019    source источник


Ответы (1)


С помощью библиотеки перекрестных помех вам сначала нужно преобразовать фрейм данных в объект SharedData для использования на нескольких связанных графиках.

С помощью функции facet_grid() вы можете создавать отдельные графики в соответствии с уровнями переменной.

library(plotly)
library(crosstalk)
library(tidyverse)

df <- data.frame(
  ID    = rep(1:4, times = 2), 
  Value = rnorm(8), 
  group = c(1, 1, 1, 1, 2, 2, 2, 2)
)

shared_df <- <- SharedData$new(df)

ggplotly(
  shared_df %>%
    ggplot(aes(x = ID, y = Value)) + 
    geom_point() +
    facet_grid(~ group)
)

В результате, если вы щелкните точку на левом графике, она также выделит эту же точку на правом графике.

введите описание изображения здесь

person demarsylvain    schedule 06.02.2019
comment
Да, но предположим, что у меня также есть групповая переменная, и один график предназначен для одной группы, а другой - для другой группы. Что-то вроде следующего. Но SharedData не позволяет подмножество. df ‹- data.frame (ID = rep (1: 4, times = 2), Value = rnorm (8), group = c (1, 1, 1, 1, 2, 2, 2, 2)) shared_df‹ - SharedData $ new (df) bscols (plot_ly (shared_df [shared_df $ group == 1,], x = ~ ID, y = ~ Value), plot_ly (shared_df [shared_df $ group == 2,], x = ~ ID , y = ~ Значение)) - person Liis Kolberg; 07.02.2019
comment
ты прав. вам нужно использовать ggplotly () и facet_grid (), чтобы разделить график по группам без изменения начального df. Я буду редактировать ответ. - person demarsylvain; 07.02.2019
comment
Спасибо, это намного ближе к тому, чего я пытаюсь достичь. Однако эти два графика в примере больше не связаны. Если я выберу точку с ID = 2 на одном графике, она не будет выделять точку с таким же идентификатором на другом. Я думаю, это потому, что у них отдельные ключи перекрестных помех? - person Liis Kolberg; 07.02.2019
comment
А, теперь я понял :) shared_df ‹- SharedData $ new (df, key = ~ ID) помогло :) Большое спасибо @demarsylvain, вы очень помогли :) - person Liis Kolberg; 07.02.2019