Это дополнительный вопрос к ответу, предоставленному для Добавить событие открытия гиперссылки по клику в html-виджет, созданный в R. Рассмотрим следующий пример:
library(ggplot2)
library(plotly)
library(htmlwidgets)
library(htmltools)
myData <- data.frame(
x=c(1,2,3),
y=c(3,2,1),
label=c("Google", "Bing", "R"),
category=c("search", "search", "other"),
urls=c("http://google.de", "http://bing.com", "http://r-project.org")
)
f <- function(p) {
ply <- ggplotly(p)
javascript <- HTML(paste("
var myPlot = document.getElementById('", ply$elementId, "');
myPlot.on('plotly_click', function(data){
var urls = ['", paste(myData$urls, collapse = "', '"), "'];
window.open(urls[data.points[0].pointNumber],'_blank');
});", sep=''))
prependContent(ply, onStaticRenderComplete(javascript))
}
Это работает, как и ожидалось — щелчок по любой точке открывает соответствующий URL-адрес:
f(ggplot(myData, aes(x=x, y=y)) + geom_point(aes(text=label)))
Это не работает должным образом — индексы больше не совпадают:
f(ggplot(myData, aes(x=x, y=y)) + geom_point(aes(text=label, color=category)))
Сюжетные объекты различаются, и кажется, что pointNumber
больше не содержит абсолютный индекс всех точек, а индекс внутри (цветовой) группы.
Любые идеи о том, как адаптировать пример, чтобы он работал для общих случаев использования также с группами цвета/заливки?