我想使散点图的点可单击,并在单击时打开每个点的相应超链接。我正在尝试使用ggplotly。 使用plotly()构建图时,有一种简单的方法(请参见下面的第一个示例)。但是,当在ggplotly上运行它时,单击后会打开一个空网页。
任何人都知道如何使用下面的代码来完成这项工作吗?在代码的OnRender部分(不熟悉javascript)是否可以找到解决方案? 使用plotly的第一个代码块有效。第二个代码块是我使用ggplotly进行此操作的基本尝试,但不起作用。
任何有关此的指导都将是惊人的!预先感谢
library(plotly)
library(htmlwidgets)
library(dplyr)
#1. Using plotly
mtcars$url <- paste0(
"http://google.com/#q=",
rownames(mtcars))
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);
});
}
")
答案 0 :(得分:3)
像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);
});
}
")
答案 1 :(得分:1)
这是 Stéphane 解决方案的更通用版本,在使用组、颜色、构面等时不起作用。如果您直接在 customdata 美学中指定您的网址,一切都很好:
mtcars$url <- paste0("http://google.com/#q=", 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);
});
}
")