我想让我的散点图点可以点击,并在点击时打开每个点各自的超链接。我正试图用ggplotly来做这件事。在使用plotly((构建绘图时,有一种简单的方法可以做到这一点(请参见下面的第一个示例(。然而,当在ggplotly上运行它时,当我点击时,会打开一个空网页。
有人知道我如何使用下面的代码来实现这一点吗?代码的OnRender部分(不熟悉javascript(是否有解决方案?使用plotly的第一个代码块工作正常。第二个代码块是我使用ggplotly的基本尝试,它不起作用。
任何关于这方面的指导都将是惊人的!提前感谢
library(plotly)
library(htmlwidgets)
library(dplyr)
mtcars$url <- paste0("http://google.com/search?q=", gsub(" ", "+", rownames(mtcars)))
#1. Using plotly
p <- plot_ly(mtcars, x = ~wt, y = ~mpg) %>%
add_markers(customdata = ~url)
onRender(p, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
window.open(url);
});
}
")
#2. Using ggplotly`
p <- ggplot(data = mtcars, aes(x = wt, y = mpg))+
geom_point()
pp <- ggplotly(p)
pp <- add_markers(pp, customdata = ~url)
onRender(pp, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
url
window.open(url);
});
}
")
看起来add_markers(pp, customdata = ~url)
没有效果。这是通过做来实现的:
p <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point()
pp <- ggplotly(p)
pp$x$data[[1]]$customdata <- mtcars$url
#pp <- add_markers(pp, customdata = ~url)
ppp <- onRender(pp, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
//url
window.open(url);
});
}
")
这是Stéphane解决方案的一个更通用的版本,在使用组、颜色、面等时不起作用。如果您直接在customdata美学中指定URL,一切都很好:
mtcars$url <- paste0("http://google.com/search?q=", gsub(" ", "+", rownames(mtcars)))
p <- ggplot(data = mtcars, aes(x = wt, y = mpg, color = as.character(carb), customdata = url)) +
geom_point() +
facet_wrap(~cyl)
pp <- ggplotly(p)
ppp <- htmlwidgets::onRender(pp, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
//url
window.open(url);
});
}
")