简体   繁体   English

R Shiny:音标系列对`date_window`的反应

[英]R Shiny: dygraphs series reacting to `date_window`

In this miniapp, the goal is to display raw series and it's average over the selected range: 在此miniapp中,目标是显示原始序列及其在选定范围内的平均值:

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)

It works, even redraws the average line on the zoom ins (using mouse to select zoom date range): 它的工作原理,甚至重画了放大图上的平均线(使用鼠标选择缩放日期范围):

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

However the catch is that it loses data on each redraw, hence it is impossible to zoom out. 但是要注意的是,每次重绘都会丢失数据,因此无法缩小。 Any ideas how to rework it? 任何想法如何返工吗?

It helps to retain full dt dataset outside reactive element and update the ave (average) column based on selected reactive dygraph_date_window . 它有助于将完整的dt数据集保留在reactive元素外部,并根据所选的反应性dygraph_date_window更新ave (平均)列。 Also, retainDateWindow needs to be set to TRUE . 另外, 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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM