Сделайте так, чтобы всплывающая подсказка появлялась в соответствующих точках в разных фасетах ggplot2 на объекте заговора - PullRequest
1 голос
/ 25 мая 2019

Я использую пакеты ggplot2 и plotly R для создания графика вулкана для визуализации данных о дифференциальной численности белка.

library(ggplot2)
library(plotly)

nVals <- 80
nFacets <- 2

#example dataset
proteins <- rep(paste0('protein_', c(1:(nVals / nFacets))), nFacets)
set.seed(1)
dat <- data.frame(log_FC = c(rnorm(nVals*0.8, 0, 1), rnorm(nVals*0.2, 0, 12)),
                  log_Pval = abs(rnorm(nVals, mean=0, sd=0.01)),
                  facet = rep(paste0('Cell line ', 1:nFacets), nVals / nFacets),
                  protein = proteins[order(proteins)])


#make ggplot2 object
p <- ggplot(dat, aes(y = log_Pval, x = log_FC, text = protein)) +
  facet_wrap(~ facet) +
  geom_point()

#convert p to plotly object with plotly::ggplotly
ggplotly(p)

Пример токового выхода

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

Другими словами, , когда курсор находится над точкой в ​​1 фасете, появится окно всплывающей подсказки.по всем точкам, имеющим одинаковое значение в столбце dat$protein в смежных фасетах.

Здесь является примером того, к чему я стремлюсь.

Есть ли способ настроить поведение всплывающей подсказки для достижения того, что я описал?

1 Ответ

0 голосов
/ 25 мая 2019

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

library(crosstalk)
shared_df <- SharedData$new(dat, key = ~protein)

Затем используйте shared_df вместо dat с ggplot. Если вы выберете точку на одном графике, она выделит соответствующую точку данных (по белкам) на втором графике. Пожалуйста, дайте мне знать, если это соответствует вашим потребностям.

...