0

有这段代码。我无法让它绘制图表两次。尝试按以下顺序输入文本框的值:

  1. 1、2 和 6
  2. 1、6 和 2

例如 1,它只绘制一次图表。例如 2,它只绘制了两次(因为它们是不同的图表)有什么技巧可以让我根据用户的需要多次工作吗?

ui <- fluidPage(   
tagList( textInput(inputId = "textbox", label = NULL,value = ""),actionButton("go", "Go"),uiOutput("ui")))

server <- function(input, output) {     

observeEvent(input$go, {
output$plot1 <- renderGvis({
  df <- data.frame(country=c("US", "GB", "BR"),
                   val1=c(10,33,44),
                   val2=c(23,122,342))

  Sys.sleep(0.3)
  gvisBarChart(df, xvar="country", yvar=c("val1", "val2"),
               options=list(isStacked=TRUE, height = 300, width = 400))

})

output$plot2 <- renderGvis({
  df <- data.frame(country=c("IND", "RUS", "BR"),
                   val1=c(10,3333,244),
                   val2=c(2344,122,342))

  Sys.sleep(0.3)
  gvisBarChart(df, xvar="country", yvar=c("val1", "val2"),
               options=list(isStacked=TRUE, height = 300, width = 400))
  })
      output$ui <- renderUI({

        if(isolate(as.numeric(input$textbox)) %in% c(1,2,3)){
          box(title = "ABC", width = 10, height = 550, htmlOutput("plot1",height = 500))    
        }else{
          box(title = "DEF", width = 4, height = 550, htmlOutput("plot2",height = 500))    

        }


      })
    })  
  }
4

1 回答 1

1

感谢专家的帮助,我能够理解为什么会发生这种情况。问题在于 html 试图找出正在呈现的图表。只有当我们有动态 UI 并且调用相同的 googlevis 图表时,它才会出现。由于某种原因,它不知道正在引用哪个图表,因此不会填充。我当然对 HTML 不是很精通,而且我的陈述可能不是结论性的。不过,它通过在渲染图表时添加图表 ID 来工作。

粘贴下面的代码,希望它对将来的人也有帮助。

server <- function(input, output) {     

observeEvent(input$go, {
output$plot1 <- renderGvis({
df <- data.frame(country=c("US", "GB", "BR"),
               val1=c(10,33,44),
               val2=c(23,122,342))

Sys.sleep(0.3)
gvisBarChart(df, xvar="country",chartid = "plot1",
yvar=c("val1", "val2"),
           options=list(isStacked=TRUE, height = 300, width = 400))

})

output$plot2 <- renderGvis({
df <- data.frame(country=c("IND", "RUS", "BR"),
               val1=c(10,3333,244),
               val2=c(2344,122,342))

Sys.sleep(0.3)
gvisBarChart(df, xvar="country", chartid = "plot2",
             yvar=c("val1", "val2"),
             options=list(isStacked=TRUE, height = 300, width = 400))
})
  output$ui <- renderUI({

    if(isolate(as.numeric(input$textbox)) %in% c(1,2,3)){
      box(title = "ABC", width = 10, height = 550, htmlOutput("plot1",height = 500))    
    }else{
      box(title = "DEF", width = 4, height = 550, htmlOutput("plot2",height = 500))    

    }


  })
})  
}

尽管我已经解决了 googlevis 图表的问题,但我仍然在努力找出如何对传单包中的地图执行相同的操作。任何指针都非常受欢迎。谢谢。

于 2016-08-27T14:35:19.140 回答