【问题标题】:Shiny allow users to choose which plot outputs to displayShiny 允许用户选择要显示的绘图输出
【发布时间】:2018-06-27 00:00:07
【问题描述】:

我有一个闪亮的应用程序,我的服务器功能如下所示:

shinyServer(function(input, output, session) {
 filedata <- reactive({
  infile <- input$file1
  if (is.null(infile)) {
    return(NULL)
  }
  myDF <- fread(infile$datapath)
  return(myDF)
  # Return the requested graph
graphInput <- reactive({
switch(input$graph,
       "Plot1" = plot1,
       "Plot2" = plot2)
})
 output$selected_graph <- renderPlot({ 
paste(input$graph)
  })

 output$plot1 <- renderPlot({
 #fill in code to create a plot1
})

output$plot2 <- renderPlot({
 #fill in code to create plot2
})

UI 功能如下所示:

shinyUI(pageWithSidebar(
 headerPanel("CSV Viewer"),

 sidebarPanel(
  fileInput('file1', 'Choose CSV File',
          accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),
  selectInput("graph", "Choose a graph to view:", 
            choices = c("Plot1", "Plot2"))
  submitButton("Update View")
),#end of sidebar panel

mainPanel(
tabsetPanel(
  tabPanel("Graph Viewer", plotOutput("selected_graph"))

)

我无法在屏幕上显示选定的绘图。当我从下拉菜单中进行选择并单击“更新视图”按钮时,应用程序不会显示绘图。它不显示错误消息。它什么都不显示。

我该如何解决这个问题?

【问题讨论】:

  • 你应该创建一个reproducible example 并使用像iris 这样的内置数据。人们会在这里帮助你

标签: r shiny output reactive


【解决方案1】:

如 cmets 中所述,鉴于您的问题中的示例不完整,很难确保任何答案都有效。然而,根据提供的骨架服务器,这种选择图表的模式应该可以工作:

shinyServer(function(input, output, session) {
  filedata <- reactive({
    # Haven't tested that this will read in data correctly;
    # assuming it does
    infile <- input$file1
    if (is.null(infile)) {
      return(NULL)
    }
    myDF <- fread(infile$datapath)
    return(myDF)
  })

  plot1 <- reactive({
   # this should be a complete plot image,
   # e.g. ggplot(data, aes(x=x, y=y)) + geom_line()
  })

  plot2 <- reactive({
   # this should be a complete plot image,
   # e.g. ggplot(data, aes(x=x, y=y)) + geom_line()
  })

  # Return the requested graph
  graphInput <- reactive({
   switch(input$graph,
          "Plot1" = plot1(),
          "Plot2" = plot2()
          )
  })

  output$selected_graph <- renderPlot({ 
   graphInput()
  })
}

发生了什么变化:

  • plot1plot2reactive 函数(而不是输出),可以从 graphInput 反应函数返回
  • graphInputplot1plot2 的值(即绘图)返回到 output$selected_graph

【讨论】:

  • 谢谢。我进行了您建议的更改,现在效果很好。
猜你喜欢
  • 2012-11-13
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多