2016-08-24 8 views
0

Avoir ce bout de code. Je ne peux pas l'obtenir pour tracer la carte deux fois. Essayez des valeurs d'entrée pour textbox dans cette séquence:Impossible de rendre les graphiques googlevis deux fois via l'interface utilisateur dynamique R brillante

  1. 1, 2 et 6
  2. 1, 6 et 2

Par exemple 1, il trace le tableau une seule fois. Par exemple 2, il ne trace que deux fois (car ce sont des graphiques différents) Avez-vous des conseils pour que cela fonctionne autant de fois que l'utilisateur le souhaite?

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

     } 


     }) 
    }) 
    } 

Répondre

1

Grâce à l'aide d'un expert, j'ai pu comprendre pourquoi cela est arrivé. Le problème est avec le HTML essayant de comprendre quel graphique est rendu. Il n'apparaît que lorsque nous avons une interface utilisateur dynamique et dans le cas où le même graphique googlevis est utilisé. Pour une raison quelconque, il ne sait pas quel graphique est référencé et ne le remplit donc pas. Je ne suis certainement pas très avertis avec HTML et mes déclarations peuvent ne pas être concluantes. Néanmoins, cela fonctionne en ajoutant un ID de graphique lors du rendu du graphique.

Collage du code ci-dessous, en espérant que cela aidera aussi quelqu'un dans le futur.

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

    } 


    }) 
}) 
} 

Bien que j'ai résolu le problème pour googlevis graphiques, je me bats encore pour savoir comment faire la même chose avec les cartes du paquet dépliant. Les pointeurs sont les bienvenus. Merci.