R闪亮的html小部件之间的交互

时间:2017-09-18 01:41:46

标签: r shiny htmlwidgets networkd3 d3heatmap

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

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

这是一个可重现的代码,显示了该错误。用户界面中的注释绘制线条,您将看到图表出现并消失..

非常感谢你的帮助!

# 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)

2 个答案:

答案 0 :(得分:2)

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

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

  1. networkD3还原为版本&lt; 0.3这样它也使用D3v3

  2. 游说chorddiag developersd3heatmap developers升级到D3v4

  3. 游说htmlwidgets developers提出一种处理冲突的JavaScript依赖关系的强大方法

答案 1 :(得分:0)

@CJYetman提供了3种解决方案。这里还有一个,尽管它仍然不吸引人,但工作量可能较小:将chorddiagd3heatmap中使用的库从d3重命名为其他名称,以便D3的第3版(两者)和版本4(由networkD3使用)可以共存于同一页面上。

chorddiag上进行此操作的第一遍是:https://github.com/dmurdoch/chorddiag。它将库重命名为d3_3。同样的更改似乎也适用于d3heatmap;参见https://github.com/dmurdoch/d3heatmap