gpt4 book ai didi

r - 添加超链接到 Shiny 图

转载 作者:行者123 更新时间:2023-12-02 10:50:26 25 4
gpt4 key购买 nike

我制作了一个 Shiny 应用程序,使用不同的绘图解决方案在 Shiny 上渲染来自 ggplot2 的图形(我最喜欢的是 plotly)。
我喜欢这样一个事实:用户可以与图表进行交互:使用plotly,用户可以放大图表或单击点(例如散点图上的点)并访问它们的值。

我想将散点图上的每个点链接到一个 URL(不显示它),并允许用户单击一个点,这将触发激活打开新网页的超链接。

如果我可以使用plotly 来做到这一点,那就太棒了,但我对任何其他类型的技术持开放态度(ggvisdygraph 等)。

最佳答案

Shiny 的应用程序使用 plotly's postMessage APIplotly.js ,两者都公开 clickhoverzoom 事件。这些事件尚未作为底层 Shiny 服务器的回调公开,但可以通过自定义 JavaScript 访问它们,您可以在 Shiny 中为自己提供服务。

以下是点击事件的示例:

Adding click events to graphs in Shiny

ui.R

library(shiny)
library(plotly)

shinyUI(fluidPage(
mainPanel(
plotlyOutput("trendPlot"),
tags$head(tags$script(src="clickhandler.js"))
)
))

服务器.R

library(shiny)
library(plotly)

x = c(1, 2, 3)
y = c(4, 2, 4)
links = c("https://plot.ly/r/",
"https://plot.ly/r/shiny-tutorial",
"https://plot.ly/r/click-events")

df = data.frame(x, y, links)

shinyServer(function(input, output) {

output$trendPlot <- renderPlotly({
# Create a ggplot
g = ggplot(data=df, aes(x = x, y = y)) + geom_point()
# Serialize as Plotly's graph universal format
p = plotly_build(g)
# Add a new key, links, that JS will access on click events
p$data[[1]]$links = links
p

# Alternatively, use Plotly's native syntax. More here: https://plot.ly/r
# plot_ly(df, x=x,y=y,links=links)
})
})

www/clickhandler.js

$(document).ready(function(){
// boiler plate postMessage plotly code (https://github.com/plotly/postMessage-API)
var plot = document.getElementById('trendPlot').contentWindow;

pinger = setInterval(function(){
plot.postMessage({task: 'ping'}, 'https://plot.ly')
}, 100);

var clickResponse = function(e) {
plot = document.getElementById('trendPlot').contentWindow;
var message = e.data;
console.log( 'New message from chart', message );
if(message.pong) {
// tell the embedded plot that you want to listen to click events
clearInterval(pinger);
plot.postMessage({
task: 'listen', events: ['click']}, 'https://plot.ly');
plot.postMessage({
task: 'relayout',
'update': {hovermode: 'closest'},
},
'https://plot.ly');
}
else if(message.type === 'click') {
var curveNumber = message['points'][0]['curveNumber'],
pointNumber = message['points'][0]['pointNumber'];

var link;
var traces = message.points[0].data;
if(traces !== null && typeof traces === 'object') {
link = traces.links[pointNumber];
} else {
link = traces[curveNumber].links[pointNumber];
}

console.log(link);

var win = window.open(link, '_blank');
win.focus();
}
};

window.addEventListener("message", clickResponse, false);

});

以下是一些可能有用的资源:

关于r - 添加超链接到 Shiny 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32057164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com