2015-06-20 105 views
1

在此的miniapp,目标是显示原始的系列,它的平均值所选择的范围:ř闪亮:dygraphs系列反应以`date_window`

library(dygraphs) 
library(datasets) 

server <- function(input, output) { 

    reacteddata <- reactive({ 

    dt = cbind(as.xts(ldeaths),ave=NA) 
    if (!is.null(input$dygraph_date_window)){ 
     start=strftime(input$dygraph_date_window[[1]]) 
     end=strftime(input$dygraph_date_window[[2]]) 
     subset = window(as.xts(ldeaths), start=start, end=end) 
     ave = rep(mean(subset), length(subset)) 
     dt[index(as.xts(subset)),"ave"] = ave 
     dt = dt[index(as.xts(subset))] 
    } else { 
     dt[,"ave"] = rep(mean(ldeaths), length(ldeaths)) 
    } 
    dt 
    }) 

    output$dygraph <- renderDygraph({ 
    dygraph(reacteddata(), main = "Predicted Deaths/Month") 
    }) 
} 

ui <- fluidPage(

    sidebarLayout(
    mainPanel(
     dygraphOutput("dygraph") 
    ) 
) 
) 

shinyApp(ui = ui, server = server) 

它的工作原理,甚至重绘变焦平均线插件(使用鼠标选择变焦日期范围):

enter image description here

enter image description here

enter image description here

但是,它的缺点是它会丢失每次重绘的数据,因此无法缩小。任何想法如何修改它?

回答

1

它有助于保留完整的数据集dtreactive元件和更新基于选定的活性dygraph_date_windowave(平均)柱。 另外,需要将retainDateWindow设置为TRUE

library(dygraphs); library(shiny); library(datasets); library(xts) 

server <- function(input, output) { 
    dt = setNames(as.xts(ldeaths), "ldeaths") 
    dt = cbind(dt,ave=NA) 

    reacteddata <- reactive({ 
    if (!is.null(input$dygraph_date_window)){ 
     start=strftime(input$dygraph_date_window[[1]]) 
     end=strftime(input$dygraph_date_window[[2]]) 
     subset = window(dt, start=start, end=end) 
     ave = rep(mean(subset$ldeaths), nrow(subset)) 
     dt[index(as.xts(subset)),"ave"] = ave 
    } else { 
     dt[,"ave"] = rep(mean(ldeaths), length(ldeaths)) 
    } 
    dt 
    }) 

    output$dygraph <- renderDygraph({ 
    dygraph(reacteddata(), main = "Predicted Deaths/Month") %>% 
     dyOptions(retainDateWindow = TRUE) 
    }) 
} 

ui <- fluidPage(
     dygraphOutput("dygraph") 
) 

shinyApp(ui = ui, server = server)