R Shiny : dygraphs series reacting to `date_window`

标签 r shiny dygraphs

在此小应用程序中,目标是显示原始系列及其在选定范围内的平均值:

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

但问题是每次重绘都会丢失数据,因此无法缩小。有什么想法如何重做吗?

最佳答案

它有助于在reactive元素之外保留完整的dt数据集,并根据所选的 react dygraph_date_window更新ave(平均)列。 此外,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)

关于R Shiny : dygraphs series reacting to `date_window` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955578/

相关文章:

r - 为什么在此示例中长度(f)和长度(g)之间存在差异?

r - Shiny 应用程序中 dbplyr 查询的条件过滤器

r - 如何在 R 中的 Shiny 服务器中使 for 循环 react ?

r - r Shiny 应用程序中的 URL 缩短器

r dygraphs 多天内按一天中的时间绘制阴影区域

r - 在R中使用正则表达式删除字符串中除指定单词之外的所有字符

r - 使用 docker 文件安装 R 包

r - 如何在 quantmod 图表中突出显示单个蜡烛?

r - 一次在多个R图中的笔画

dygraphs - 如何在 dygraphs 中绘制烛台 + 滚轴 [r]