首页 > 解决方案 > 在 Shiny R 中显示维恩图

问题描述

我想VennDiagram::venn.diagram()在 Shiny R 中以交互方式显示 a。

但是,该函数venn.diagram()需要一个filename- 属性,因为它会生成一个外部 TIFF 文档。

因此,我应该使用什么函数来根据用户输入(input$SELECTION)动态生成维恩图?

我想我应该使用函数draw.single.venn, draw.triple.venn, draw.pairwise.venn, draw.quad.venn,但我不知道我需要多少个 venns。

library(shiny)
library(Venn.Diagram)

# Define UI ----
ui <- fluidPage(
  titlePanel("Title"),
  
  sidebarLayout(
    sidebarPanel(
      
      checkboxGroupInput(
        "SELECTION",
        label = "Select your subsets",
        choices = list("Web of Science" = "WoS",
                       "Scopus" = "Scopus",
                       "Dimensions" = "Dimensions",
                       "LENS" = "LENS"),
        selected = c("WoS", "Scopus")
      ),

    mainPanel(
      plotOutput("venn")
    )
  )
)

# Define server logic ----
server <- function(input, output) {
  
  output$venn <- renderPlot({

    data <- list(WoS=c("ff", "gg"), Scopus=c("ff", "gg"), Dimensions=c("ff", "gg"), LENS=c("ff", "gg"))
    
    # select only those elements that are named in input$SELECTION
    data <- data[input$SELECTION]
    
    # this will not work
    venn.diagram(data)
  })
  
}

# Run the app ----
shinyApp(ui = ui, server = server)

标签: rshinyvenn-diagram

解决方案


Limey 在评论中发布了正确答案,来自此来源

首先,我添加了这个功能:

display_venn <- function(x, ...){
  library(VennDiagram)
  grid.newpage()
  venn_object <- venn.diagram(x, filename = NULL, ...)
  grid.draw(venn_object)
}

其次,我venn.diagram(data)display_venn(data).


推荐阅读