首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shiny overlaying中的Chord网络

Shiny overlaying中的Chord网络
EN

Stack Overflow用户
提问于 2020-12-04 08:29:12
回答 1查看 50关注 0票数 0

我正在一个闪亮的应用程序中渲染chord网络。我想要做的是提供网络的两种不同表示。一个基于谁受谁影响,另一个基于谁影响谁。简而言之,我所代表的是一个版本中的数据集,以及该数据集在另一个版本中的转置。

我的问题是,当我渲染网络并切换输入时,新版本的绘图只是简单地覆盖了旧版本的绘图。在显示下一个图之前,我需要以某种方式删除前一个图。

此最小示例显示了默认演示文稿:

这就是当我选择绘制转置数据时发生的事情(例如,我更改了数据集)

如果我切换回原来的选择,它只是简单地再次重叠。

我相信这个问题有一个简单的答案,我只是一直无法在谷歌上搜索到正确的单词。

下面是可重现的最小代码

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

Data <- matrix(c(NA,  1951,  8010, 1013,
               5871, NA, 16145,  990,
               8916,  2060,  NA,  940,
               2868,  6171,  8045, NA), nrow = 4)

ui <- fluidPage(

    titlePanel("Chord network"),

    mainPanel(   htmlOutput("inputDataChoice"),
                 chordNetworkOutput(outputId = "chord_network", width = "600px", height = "600px")
             )
             
    )


server <- function(input, output) {
    
    #Choose the data type
    output$inputDataChoice <- renderUI({
        selectInput(inputId = "dataChoice", label = "Choose data shape",
                    choices=c("Influenced", "Influences"),
                    width = "450px"
        )})

    #Dataset shape based on choice
    chordData <- reactive({
        switch(input$dataChoice,
               "Influenced" = Data,
               "Influences" = t(Data))
    })

    #Plot
    observe ({
        output$chord_network <- renderchordNetwork({


            chordNetwork(chordData(),
                         padding = 0.1,
                         colourScale = c("#000000",
                                         "#FFDD89",
                                         "#957244",
                                         "#F26223"),
                         labels = c("Bob", "Brenda", "Barry", "Belinda"))

    })})
}

shinyApp(ui = ui, server = server)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 15:52:00

有趣的bug!看起来问题实际上出在正在使用的包中。我很惊讶这个bug还没有被报道,我猜人们没有在闪亮上使用太多?!

我通过在渲染小部件之前清除画布修复了这个错误。我不是d3专家,但我认为这可以在chordNetwork.js包中通过使用data().enter()而不是datum()来修复,但不幸的是我无法让它工作。

相反,它是通过在渲染任何绘图之前插入以下代码行来修复的。

代码语言:javascript
复制
d3.select(el).select("g").selectAll("g").remove() //Create a blank canvas

您可以在我的forked代码库https://github.com/sada1993/networkD3中访问这个修复的包。使用devtools::install_github("sada1993/networkD3")安装程序包。

也许我们可以为这个修复添加一个PR?但看起来这个包已经不在开发中了。

下面是看到这些变化的区别:https://github.com/christophergandrud/networkD3/compare/master...sada1993:master

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65136245

复制
相关文章

相似问题

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