如何使用ggplotly - R使散点图点打开超链接
How to make scatterplot points open a hyperlink using ggplotly - R
我想让我的散点图点可点击,并在点击时打开每个点各自的超链接。我正在尝试使用 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);
});
}
")
我想让我的散点图点可点击,并在点击时打开每个点各自的超链接。我正在尝试使用 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);
});
}
")