Интерактивные точечные графики в R, наложение / сводка / всплывающая подсказка в качестве функции построения графика, предоставляемой пользователем

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

Например, этот график. Можно навести указатель мыши на кнопки, чтобы получить небольшую числовую сводку данных за точкой, то есть всплывающую подсказку.

Когда у вас есть набор данных с большим количеством переменных, часто полезно исследовать / визуализировать оценки из PCA или выполнять многомерное масштабирование (MDS). Но если построить график данных в интерактивном режиме, как в приведенном выше примере, сводка при наведении курсора на точку дает не так много информации, то есть просто длинный список чисел. Было бы лучше иметь возможность создавать настраиваемый график для отображения, а не просто отображать числовые значения.

Итак, мой вопрос:

Возможно ли (в некоторых из пакетов, доступных в R) генерировать визуальную сводку при наведении курсора на точку на диаграмме рассеяния. Это может быть гистограмма или просто определенная пользователем функция построения графика, которая принимает одну строку из data.frame в качестве аргумента.

Если это возможно, это очень поможет быстро понять результаты MDS.

РЕДАКТИРОВАТЬ:

Вот код для выполнения MDS с набором данных радужной оболочки:

library(ggplot2)
library(plotly)
d <- dist(iris[,-5]) # euclidean distances between the rows
fit <- cmdscale(d,eig=TRUE, k=2) # k is the number of dim

# Put coordinates and original data in one data.frame
x <- fit$points[,1]
y <- fit$points[,2]
pDat <- data.frame(x=x,y=y)
pDat <- cbind(pDat,iris)
p <- ggplot(pDat) + geom_point(aes(x,y))
ggplotly(p)

Во-первых, теперь всплывающая подсказка включает только координаты x, y. Я хотел бы, чтобы всплывающая подсказка содержала значения исходных 4 переменных. Затем вместо исходных 4 переменных за точкой данных я хотел бы отобразить всплывающую подсказку в виде гистограммы. MDS сохраняет расстояние между точками данных, поэтому можно будет постепенно наводить курсор мыши и видеть гистограмму, почти непрерывно меняющуюся, потому что расстояния сохраняются. В моем случае использования у меня есть 30 переменных за каждой точкой, поэтому сводка гистограммы дает больше визуальной информации, чем 30 числовых значений.


person Gumeo    schedule 26.05.2016    source источник
comment
Единственное решение, которое я могу придумать, - это использовать блеск. Вот пример: plot.ly/r/shiny-coupled-events   -  person royr2    schedule 26.05.2016
comment
@ royr2 спасибо! Это похоже на хорошее первое начало, т.е. я мог суммировать информацию из каждой точки на графике, появляющейся рядом с другой! По-прежнему интересно, есть ли у кого-то решение для всплывающих подсказок, которое, возможно, обеспечит более плавный пользовательский интерфейс.   -  person Gumeo    schedule 26.05.2016


Ответы (2)


Если вы используете последнюю разрабатываемую версию rbokeh, вы можете добиться желаемого с помощью следующего:

devtools::install_github("bokeh/[email protected]")

library(rbokeh)

iris$sw <- paste0(iris$Sepal.Width * 20, "px")
iris$pw <- paste0(iris$Petal.Width * 20, "px")
iris$sl <- paste0(iris$Sepal.Length * 20, "px")
iris$pl <- paste0(iris$Petal.Width * 20, "px")

style_str <- "white-space: nowrap; border: 1px solid white; background: steelblue; height: 15px;"

figure() %>%
  ly_points(x = Sepal.Width, y = Sepal.Length, color = Species,
  data = iris, hover = glue::glue("
<div>
  <div style='{style_str} width: @sw'>Sepal width</div>
  <div style='{style_str} width: @pw'>Petal Width</div>
  <div style='{style_str} width: @sl'>Sepal width</div>
  <div style='{style_str} width: @pl'>Petal Length</div>
</div>
"))

всплывающие подсказки гистограммы rbokeh

Что здесь происходит, так это то, что rbokeh позволяет вам указывать произвольный html в качестве всплывающих подсказок, поэтому здесь мы создаем блоки div с указанной шириной в соответствии со значениями данных (на которые ссылаются @sw и т. Д.) Для создания гистограммы.

Приведенный выше пример хорошо работает для простой гистограммы, но если вы хотите иметь возможность отображать произвольные изображения во всплывающей подсказке, одним из подходов будет предварительное создание растрового изображения для каждой точки данных и внедрение его в виде всплывающей подсказки html (img с изображением в кодировке base64 как src).

person Ryan    schedule 17.10.2017
comment
Спасибо, это именно то, что я искал! - person Gumeo; 18.10.2017
comment
Привет, я попытался добавить изображения во всплывающую подсказку, но не смог заставить ее работать. У вас есть пример, как это сделать? Любые предложения приветствуются! - person Marcelo Araya-Salas; 09.03.2019

Если вы используете RStudio, пакет plotly должен быть достаточно удобным для использования. Например:

library(ggplot2)
library(plotly) 
p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) + geom_point()
 ggplotly(p)

Информация, отображаемая при наведении курсора на одну точку, выглядит так:

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

person Adam Quek    schedule 27.05.2016
comment
Спасибо за ответ. Я немного поигрался с сюжетом, и мне нужно немного больше функциональности, чем всплывающая подсказка с числами. Я хотел бы заменить зеленую всплывающую подсказку, которая отображается как заданная пользователем функция построения графика. - person Gumeo; 27.05.2016
comment
@Gumeo не совсем уверен, что именно вы хотите отображать в hoverinfo. В любом случае обратитесь к plot.ly/r/text-and-annotations и см. пример для настраиваемого текста при наведении курсора. Может, ты этого и хотел. - person Adam Quek; 27.05.2016
comment
Да, я хочу, чтобы hoverinfo был сюжетом, а не текстом. Я постараюсь отредактировать свой вопрос, чтобы прояснить этот момент. - person Gumeo; 27.05.2016