【问题标题】:Interaction between html widgets in R shinyR闪亮中的html小部件之间的交互
【发布时间】:2018-02-26 11:17:00
【问题描述】:

我正在开发一个使用多个 html 小部件的 R 闪亮应用程序,特别是 networkD3d3heatmapchorddiag

这些小部件可以单独工作。但是,在同一页面中使用它们会在它们应该在的位置留下一个空白

这是一个显示错误的可重现代码。在 UI 中注释情节线,您将看到情节出现和消失..

非常感谢您的帮助!

# libraries
library(shiny)
library(d3heatmap)
library(chorddiag)
library(networkD3)

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

  # create heatmap
  output$heatmap <- renderD3heatmap({
    d3heatmap(mtcars, scale = "column", colors = "Spectral")
  })

  # create chord diagram
  output$chord <- renderChorddiag({
    m <- matrix(c(11975,  5871, 8916, 2868,1951, 10048, 2060, 6171, 8010, 16145, 8090, 8045,1013,   990,  940, 6907),
    byrow = TRUE, nrow = 4, ncol = 4)
    haircolors <- c("black", "blonde", "brown", "red")
    dimnames(m) <- list(have = haircolors, prefer = haircolors)
    groupColors <- c("#000000", "#FFDD89", "#957244", "#F26223")
    chorddiag(m, groupColors = groupColors, groupnamePadding = 20)
  })

  # create sankey
  output$sankey <- renderSankeyNetwork({
    nodes=data.frame(ID=c("A","B","C","D","E"))
    links=data.frame(source=c(1,2,3), target=c(3,4,4), value=c(12,15,29))
    sankeyNetwork(Links = links, Nodes = nodes, Source = "source", Target = "target", Value = "value", NodeID = "ID")
  })

}



# Ui
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel("shiny shines"),
    mainPanel(
        # Comment these lines and you will see charts appear / disappear.
        d3heatmapOutput("heatmap"),
        chorddiagOutput("chord"),
        sankeyNetworkOutput("sankey")
    )
  )
)

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 似乎包“chorddiag”不可用(适用于 R 版本 3.4.1)...
  • @Samuel:可以使用开发工具安装 Chorddiag 库:devtools::install_github("mattflor/chorddiag")。感谢您的帮助!
  • 我可以同时看到heatmapchord。仅添加 sankey 会使页面变为空白。
  • chorddiag github 页面上有一个与此问题相关的未解决问题:github.com/mattflor/chorddiag/issues/18

标签: r shiny htmlwidgets networkd3 d3heatmap


【解决方案1】:

networkD3 已于 2017 年 2 月在 version 0.3 中更新为 D3v4,它与 D3 的 v3 版本不兼容,而 chorddiagd3heatmap 似乎使用了该版本。 htmlwidgets 是驱动上述包的底层包,它只使用最新版本的依赖项,因此使用同一库的冲突版本的 htmlwidget 不能同时工作。查看here 了解有关此问题的讨论起点。

你有几个可能的选择,虽然它们都不是很好......

  1. networkD3 恢复为

  2. chorddiag developersd3heatmap developers 的大厅升级到 D3v4

  3. htmlwidgets developers 的游说区提出了一种处理冲突的 JavaScript 依赖项的稳健方法

【讨论】:

    【解决方案2】:

    @CJYetman 提供了 3 个选项来处理这个问题。这里还有一个,虽然它仍然不吸引人,但可能工作量更少:将chorddiagd3heatmap 中使用的库从d3 重命名为其他名称,以便 D3 的第 3 版(由这两个使用)和版本4个(networkD3使用)可以在同一个页面共存。

    chorddiag 的第一次操作在这里:https://github.com/dmurdoch/chorddiag。它将库重命名为d3_3。同样的变化似乎也适用于d3heatmap;见https://github.com/dmurdoch/d3heatmap

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 2016-06-29
      • 2018-07-25
      • 2021-10-14
      • 2019-05-20
      • 2017-03-12
      • 2015-03-05
      相关资源
      最近更新 更多