我正在使用闪亮的仪表板开发一个闪亮的应用程序,并试图使情节点可点击。单击时,应从数据集中的关联 url 列中显示关联的网页。
我正在使用plotly,将ggplot转换为ggplotly。
不幸的是,我的ggplot有注释和形状,这似乎禁用了htmlwidgets::onRender((函数。但是,onRender(( 似乎在我没有添加形状和注释等美学时起作用。
任何人都对我如何使下面的代码与注释和形状一起使用有任何见解吗?帮助将不胜感激!
我正在尝试编码的版本:
library(plotly)
library(htmlwidgets)
library(ggplot2)
iris$url <- paste0(
"http://google.com/#q=",
iris$Species
)
p <- ggplot(data = iris, aes(x = Petal.Width, y = Sepal.Length, shape = Species))+
geom_point()+
annotate('rect', xmin = 2, xmax = 6, ymin = 2, ymax = 6,fill="firebrick",alpha = .2)
p
p1 <- ggplotly(p)
p1
p1$x$data[[1]]$customdata <- iris$url
#pp <- add_markers(pp, customdata = ~url)
p2 <- onRender(p1, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
//url
window.open(url);
});
}
")
p2
更简单的版本,可以用作上述的基础代码:
library(plotly)
library(htmlwidgets)
library(ggplot2)
iris$url <- paste0(
"http://google.com/#q=",
iris$Species
)
p <- ggplot(data = iris, aes(x = Petal.Width, y = Sepal.Length))+
geom_point()
p
p1 <- ggplotly(p)
p1
p1$x$data[[1]]$customdata <- iris$url
#pp <- add_markers(pp, customdata = ~url)
p2 <- onRender(p1, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
//url
window.open(url);
});
}
")
p2
您必须将链接信息添加到要链接的每个图层。 这应该有效:
library(plotly)
library(htmlwidgets)
library(ggplot2)
p <- ggplot(data = iris, aes(x = Petal.Width, y = Sepal.Length, shape = Species))+
geom_point()+
annotate('rect', xmin = 2, xmax = 6, ymin = 2, ymax = 6,fill="firebrick",alpha = .2)
p
p1 <- ggplotly(p)
p1
for(i in 1:length(p1$x$data)){
if(p1$x$data[[i]]$name %in% levels(iris$Species)){
p1$x$data[[i]]$customdata = rep(paste0("http://google.com/#q=",
p1$x$data[[i]]$name),length(p1$x$data[[i]]$x))
}
}
p2 <- onRender(p1, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
//url
window.open(url);
});
}
")
p2
它只是遍历绘图实例上的所有层,如果名称与其中一个物种名称匹配,则添加指向相应 google 查询的链接。