首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应节点单击的Shiny & networkD3

响应节点单击的Shiny & networkD3
EN

Stack Overflow用户
提问于 2017-05-09 23:08:14
回答 1查看 1.3K关注 0票数 7

我正在尝试使用networkD3和shiny来可视化一些数据。我想有一个动作发生时,在一个图形中的节点被单击。我使用的是diagonalNetwork函数,如以下代码所示。

forceNetwork函数有一个选项,可以让clickaction在节点被单击时响应。但是,对于diagonalNetwork函数,我找不到类似的选项。有没有其他方法来实现这一点?

代码语言:javascript
复制
#### Load necessary packages and data ####
library(shiny)
library(networkD3)

data(MisLinks)
data(MisNodes)

hc <- hclust(dist(USArrests), "ave")
URL <- paste0(
  "https://cdn.rawgit.com/christophergandrud/networkD3/",
  "master/JSONdata//flare.json")



## Convert to list format
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)


#### Server ####
server <- function(input, output) {

  output$simple <- renderDiagonalNetwork({
    diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9)
  })  


  output$force <- renderForceNetwork({
    forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
                 Target = "target", Value = "value", NodeID = "name",
                 Group = "group", opacity = input$opacity)


  })

  ## 
  #dendroNetwork(hc, height = 600)
 # 
#  dendroNetwork(hc, height = 500, width = 800, fontSize = 10,
#                linkColour = "#ccc", nodeColour = "#fff", nodeStroke = "steelblue",
#                textColour = "#111", textOpacity = 0.9, textRotate = NULL,
#                opacity = 0.9, margins = NULL, linkType = c("elbow", "diagonal"),
#                treeOrientation = c("horizontal", "vertical"), zoom = FALSE)



}

#### UI ####

ui <- shinyUI(fluidPage(

  titlePanel("Shiny networkD3 "),

  sidebarLayout(
    sidebarPanel(
      sliderInput("opacity", "Opacity (not for Sankey)", 0.6, min = 0.1,
                    max = 1, step = .1)
    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Simple Network", diagonalNetworkOutput("simple")),
        tabPanel("Force Network", forceNetworkOutput("force"))
      )
    )
  )
))

#### Run ####
shinyApp(ui = ui, server = server)
EN

回答 1

Stack Overflow用户

发布于 2017-05-25 20:30:16

您可以使用htmlwidgetsonRender函数将onclick事件附加到节点,如下所示……

代码语言:javascript
复制
library(shiny)
library(networkD3)
library(htmlwidgets)

URL <- "https://raw.githubusercontent.com/christophergandrud/networkD3/master/JSONdata/flare.json"
Flare <- jsonlite::fromJSON(URL, simplifyDataFrame = FALSE)

clickJS <- 'd3.selectAll(".node").on("click", function(d){ alert(d.data.name); })'
  
server <- function(input, output) {
  output$simple <- renderDiagonalNetwork({
    onRender(diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9), clickJS)
  })
}

ui <- fluidPage(
    diagonalNetworkOutput("simple"),
    tags$script(clickJS)
)

shinyApp(ui = ui, server = server)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43873498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档