我正在使用闪亮的仪表板来制作闪亮的应用程序,并试图使绘图点可点击。单击后,相关的网页应从数据集中的相关网址列中显示。
我正在使用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
答案 0 :(得分:0)
您必须将链接信息添加到要链接的每个图层。 这应该起作用:
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
如果名称与某个物种名称之一匹配,它只会循环遍历plotly-instance上的所有层并向相应的Google查询添加链接。