使用 shiny 中的单击操作将 networkD3 中的节点链接到网站



有没有办法使用r中networkD3包中的函数forceNetwork((将节点用作外部网站的链接,但合并到闪亮的应用程序中?

我在这里找到了这个答案

但是当我尝试将其作为闪亮的应用程序运行时,它不起作用。这是我的代码:

library(shiny)
library(networkD3)
source =c(0,0,3,3,3,7,7,10,9,7,1,6,4,5,8,2)
target = c(1,2,4,5,6,8,9,11,12,10,9,10,8,9,11,8)
value = c(10,10,10,10,10,10,10,20,20,10,2,2,2,10,20,15)
MisLinks = data.frame(source,target,value)

name = c("[Category]Genre", "CCG", "Action",  [Category]Art","Realistic Art", "Dark Art", "Cartoony", "[Category]Time  demend", "Mid-Core", "Hard-Core", "Casual", "Install", "Not Install")
group = c(1,2,2,3,4,4,4,5,6,6,6,8,8)
size = c(50,20,20,50,20,20,20,50,20,20,20,250,250)
hyperlink = c("http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://yahoo.com")
MisNodes = data.frame(name, group, size, hyperlink)

ui = fluidPage(
titlePanel("Testing app"),
sidebarLayout(
sidebarPanel(
  sliderInput("opacity", "Test", 0.6, min = 0.1, max = 1, step = .1)
),
mainPanel(
  tabsetPanel(
    tabPanel("Force Network", forceNetworkOutput("force"))
  )
)
)
)
Myclickaction = "window.open(d.name, '_blank')"
server = function(input,output) {
output$force = renderForceNetwork({
forceNetwork(Links = MisLinks, Nodes = MisNodes,
             Source = "source", Target = "target", charge = -150, 
             legend = TRUE, opacityNoHover = 1, Nodesize = "size",
             Value = "value", NodeID = "name",
             Group = "group", linkWidth = 2, clickAction =  Myclickaction,
             opacity = 0.9, colourScale =JS("d3.scaleOrdinal(d3.schemeCategory20);"),
             zoom=t)

})
}
shinyApp(ui = ui, server = server)

期望的结果:当您在已发布的闪亮应用中单击节点时您会在浏览器中打开一个新窗口,转到特定网页,具体取决于单击的节点!

  1. 您在第 10 行[Category]Art之前缺少报价
  2. 您正在通过zoom=t而不是第 44 行的zoom=T
  3. Myclickaction = "window.open(d.name, '_blank')"Myclickaction = "window.open(d.hyperlink, '_blank')"在第 33 行
  4. 在第 38 行,将 forceNetwork 的输出保存到对象,以便以后可以对其进行修改,例如fn <- forceNetwork(Links = MisLinks, Nodes = MisNodes,
  5. forceNetwork调用(第 45 行(之后,添加fn$x$nodes$hyperlink <- hyperlink,然后在下一行添加fn

问题是在运行forceNetwork函数后需要添加超链接,因为这个技巧不是官方支持的,并且节点对象中的超链接将被forceNetwork函数删除。

因此,带有所述更改以及一些格式修复的完整代码看起来像......

library(shiny)
library(networkD3)
source =c(0,0,3,3,3,7,7,10,9,7,1,6,4,5,8,2)
target = c(1,2,4,5,6,8,9,11,12,10,9,10,8,9,11,8)
value = c(10,10,10,10,10,10,10,20,20,10,2,2,2,10,20,15)
MisLinks = data.frame(source,target,value)
name = c("[Category]Genre", "CCG", "Action",  "[Category]Art","Realistic Art", "Dark Art", "Cartoony", "[Category]Time  demend", "Mid-Core", "Hard-Core", "Casual", "Install", "Not Install")
group = c(1,2,2,3,4,4,4,5,6,6,6,8,8)
size = c(50,20,20,50,20,20,20,50,20,20,20,250,250)
hyperlink = c("http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://google.com", "http://yahoo.com", "http://yahoo.com")
MisNodes = data.frame(name, group, size, hyperlink)
ui = fluidPage(
  titlePanel("Testing app"),
    sidebarLayout(
    sidebarPanel(
      sliderInput("opacity", "Test", 0.6, min = 0.1, max = 1, step = .1)
    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Force Network", forceNetworkOutput("force"))
      )
    )
  )
)
Myclickaction = "window.open(d.hyperlink, '_blank')"
server = function(input,output) {
  output$force = renderForceNetwork({
    fn <- forceNetwork(Links = MisLinks, Nodes = MisNodes,
      Source = "source", Target = "target", charge = -150,
      legend = TRUE, opacityNoHover = 1, Nodesize = "size",
      Value = "value", NodeID = "name",
      Group = "group", linkWidth = 2, clickAction =  Myclickaction,
      opacity = 0.9, colourScale =JS("d3.scaleOrdinal(d3.schemeCategory20);"),
      zoom=TRUE)
    fn$x$nodes$hyperlink <- hyperlink
    fn
  })
}
shinyApp(ui = ui, server = server)

此外,您必须在浏览器中打开闪亮的应用程序,因为在单独的 RStudio 查看器窗口中打开链接似乎不起作用。

相关内容

  • 没有找到相关文章

最新更新