使用renderSankeyNetwork

时间:2017-09-16 09:05:37

标签: r shiny shinydashboard htmlwidgets networkd3

我正在开发一个Shiny应用程序,它有两个组件Sankey Diagram和一个动作按钮,点击按钮时会弹出“SaveMsg”对话框。

我看到了意想不到的行为,如果我在一个仪表板中的用户操作按钮和Sankeyvisualization,点击操作按钮,仪表板屏幕显示为灰色。

但是,如果我评论Sankey代码并仅在UI上保留“操作”按钮,则“操作”按钮会按预期显示“保存成功”的弹出消息。 如果我评论操作按钮代码并在UI中只保留Sankey代码,我可以在仪表板上看到sankey输出。

Sankey代码和操作按钮都按预期单独工作,但是如果我将两者放在一个仪表板操作按钮灰色的屏幕外仪表板屏幕上。

我还附上了示例代码 -

library(shiny)
library(networkD3)
library(shinydashboard)
value <-  c(12,21,41,12,81)
source <- c(4,1,5,2,1)
target <- c(0,0,1,3,3)
edges2 <- data.frame(cbind(value,source,target))

names(edges2) <- c("value","source","target")
indx  <- c(0,1,2,3,4,5)
ID    <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6')
nodes <-data.frame(cbind(ID,indx))

ui <- dashboardPage(
  dashboardHeader(
  ),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    fluidPage(
      actionLink("savebtn", "Save button")
      ,sankeyNetworkOutput("simple")
    )
  )
)

server <- function(input, output,session) {

  # Show modal when button is clicked.
  observeEvent(input$savebtn, {
    showModal(modalDialog(
      title = "Save successful"))
  })

  output$simple <- renderSankeyNetwork({
    sankeyNetwork(Links = edges2, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value",  NodeID = "ID" 
                  ,units = "SSN" )
  })
}

shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:1)

我没有挖掘问题,所以我不确定为什么会这样。但是如果您想要显示的模态只是一些文本(不包含闪亮元素),您可以使用shinyalert也可以使用模态(不在CRAN上,还没有发布它)。这是使用shinyalert的代码。希望有所帮助

library(shiny)
library(networkD3)
library(shinyalert)
value <-  c(12,21,41,12,81)
source <- c(4,1,5,2,1)
target <- c(0,0,1,3,3)
edges2 <- data.frame(cbind(value,source,target))

names(edges2) <- c("value","source","target")
indx  <- c(0,1,2,3,4,5)
ID    <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6')
nodes <-data.frame(cbind(ID,indx))

ui <- dashboardPage(
  dashboardHeader(
  ),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    fluidPage(
      useShinyalert()
      ,actionLink("savebtn", "Save button")
      ,sankeyNetworkOutput("simple")
    )
  )
)

server <- function(input, output,session) {

  # Show modal when button is clicked.
  observeEvent(input$savebtn, {
    shinyalert("Save successful")
  })

  output$simple <- renderSankeyNetwork({
    sankeyNetwork(Links = edges2, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value",  NodeID = "ID" 
                  ,units = "SSN" )
  })
}

shinyApp(ui = ui, server = server)

答案 1 :(得分:0)

更新(2019.05.20)

此问题已通过shiny的开发版解决,应尽快在CRAN上发布shiny v1.3.3

此问题已经报告here,我认为它与报告的here类似。 sankeyNetwork()使用的JavaScript添加<foreignObject><xhtml:body>...来包装SVG标题,以便在旧版本的IE中使用多行标题。这个结构显然与bootstrap-datepicker所做的有冲突,经过一些测试后,我可以验证这似乎也是这里发生的事情的根源。已有pull request已在networkD3端修复此问题,但尚未经过审核和合并。完成后,安装和使用networkD3的开发版本应该可以解决此问题。我认为这也应该在上游修复,因为<foreignObject><xhtml:body>...结构似乎是有效的HTML / SVG。