R Shiny:dygraphs 系列对 `date_window` 的反应
R Shiny: dygraphs series reacting to `date_window`
在此小程序中,目标是显示原始系列,它是 selected 范围内的平均值:
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)
有效,甚至在放大时重绘平均线(使用鼠标 select 缩放日期范围):
然而问题在于它在每次重绘时都会丢失数据,因此无法缩小。任何关于如何返工的想法?
它有助于在 reactive
元素之外保留完整的 dt
数据集,并根据选定的反应 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)
在此小程序中,目标是显示原始系列,它是 selected 范围内的平均值:
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)
有效,甚至在放大时重绘平均线(使用鼠标 select 缩放日期范围):
然而问题在于它在每次重绘时都会丢失数据,因此无法缩小。任何关于如何返工的想法?
它有助于在 reactive
元素之外保留完整的 dt
数据集,并根据选定的反应 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)