2015-11-04 188 views
2

我已经拖了大约一天的互联网试图解决这个问题。我有一个闪亮的应用程序,用户可以切换数据库,输出显示在googleVis地理位置上。在没有使用开关的情况下,图表完美呈现,但是一旦在UI中使用开关,图表就会消失。我用一个actionButton和一个eventReactive语句暂时解决了这个问题,但这意味着用户必须点击按钮才能刷新(不是最优)。我担心这是GoogleVis的问题还是我的代码中的错误。我可以告诉你,dygraph与开关完美结合,使我相信它是googleVis。 这里是我的UI闪亮的googleVis GeoChart不显示与反应开关

sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("State Data Table", 
     tabName = "state", 
     icon = icon("dashboard")), 
menuItem("State Complaint Map", 
     tabName = "MAP", 
     icon = icon("bar-chart-o")), 
menuItem("Daily Data Table", 
     tabName = "Day", 
     icon = icon("dashboard")), 
menuItem("Daily Time Series Plot", 
     tabName = "TZ", 
     icon = icon("bar-chart-o")), 
selectInput("data", 
      "Data View", 
      choices=c("Product","Sub Product"), 
      multiple=FALSE), 
uiOutput("input1"), 
fluidRow(column(width=1), 
     actionButton("generate","Generate State Plot")) 
) 
) 

body <- dashboardBody(
tabItems(
tabItem(tabName = "state", 
     h2("State Data Table"), 
     DT::dataTableOutput("state") 
), 

tabItem(tabName ="Day", 
     h2("Daily Data table"), 
     DT::dataTableOutput("day")), 

tabItem(tabName="MAP", 
     h2("State Map"), 
     htmlOutput("StatePlot")), 

tabItem(tabName="TZ", 
     h2("Time Series Plot"), 

     fluidRow(
      column(width=4), 
      column(width=4, 
       box(width=NULL, 
        uiOutput("input2")))), 
     box(width=12, 
      dygraphOutput("DYEGRAPH1"))) 
) 
) 


ui <- dashboardPage(
dashboardHeader(title = "CFPB Complaints"), 
sidebar, 
body 
) 

这里是我的server.R

server <- function(input, output) { 

ProductView.st <- reactive({ 
switch(input$data, 
     "Product"=cfpb.st, 
     "Sub Product"=cfpb.st.sp) 
}) 

ProductView.ts <- reactive({ 
switch(input$data, 
     "Product"=cfpb.ts, 
     "Sub Product"=cfpb.ts.sp) 
}) 

output$input1 <- renderUI({ 
if(is.null(input$data)) 
    return(NULL) 
Var <- ProductView.st() 
selectInput("product", 
      "Select Product for State Map", 
      choices=levels(Var$Product), 
      multiple=FALSE) 
}) 

output$input2 <- renderUI({ 
if(is.null(input$data)) 
    return(NULL) 
Var <- ProductView.ts() 
selectInput("product2", 
      "Select Product", 
      choices=levels(Var$Product), 
      multiple=FALSE) 
}) 

output$day <- DT::renderDataTable({ 
datatable(ProductView.ts(),extensions = 'TableTools',  
rownames=FALSE,class = 'cell-border stripe',filter="top", 
      options = list(
      searching=TRUE, 
      autoWidth=TRUE, 
      paging=TRUE, 
      "sDom" = 'T<"clear">lfrtip', 
      "oTableTools" = list(
       "sSwfPath" = "//cdnjs.cloudflare.com/ajax/libs/datatables- 
tabletools/2.1.5/swf/copy_csv_xls.swf", 
       "aButtons" = list(
       "copy", 
       "print", 
       list("sExtends" = "collection", 
        "sButtonText" = "Save", 
        "aButtons" = c("csv","xls")))))) 
}) 

output$state <- DT::renderDataTable({ 
datatable(ProductView.st(),extensions = 'TableTools',  
rownames=FALSE,class = 'cell-border stripe',filter="top", 
      options = list(
      searching=TRUE, 
      autoWidth=TRUE, 
      paging=FALSE, 
      "sDom" = 'T<"clear">lfrtip', 
      "oTableTools" = list(
       "sSwfPath" = "//cdnjs.cloudflare.com/ajax/libs/datatables- 
tabletools/2.1.5/swf/copy_csv_xls.swf", 
       "aButtons" = list(
       "copy", 
       "print", 
       list("sExtends" = "collection", 
        "sButtonText" = "Save", 
        "aButtons" = c("csv","xls")))))) 
    }) 

    plot1 <- eventReactive(input$generate,{ 
    state <- ProductView.st() 
    state <- subset(state,Product == input$product) 
    state 
    }) 



    output$StatePlot <- renderGvis({ 
    gvisGeoChart(plot1(),"State","Complaints To Population *  
    10000",options=list(region="US", 
                       displayMode="regions", 
                       resolution="provinces", 
                       height=650,width=1100)) 

    }) 



    dygraph1 <- reactive({ 
    if(is.null(input$data)) 
    return(NULL) 
    t <- ProductView.ts() 
    t$Date.received <- as.Date(t$Date.received,format="%Y-%m-%d") 
    t <- t[t$Product == input$product2,] 
    t <- t[,-2] 
    t <- as.xts(t,order.by=t$Date.received) 
    t 
    }) 

    output$DYEGRAPH1 <- renderDygraph({ 
    dygraph(dygraph1(),main="Complaints since 2012") %>% 
    dyAxis("y",label = "Number of Complaints") %>% 
    dyRangeSelector() 
    }) 

    } 
    shinyApp(ui, server) 

回答

1

我似乎已经解决了gvisGeoChart功能之前,使用Sys.sleep(0.3)对我自己这个问题。我很好奇为什么我需要延迟在交换机上呈现googleVis图表?

+0

我想我想通了。检查此帖:http://stackoverflow.com/questions/34579494/googlevis-does-not-work-properly-with-two-dependent-widget-shiny –