2017-05-08 5 views
0

Angenommen, ich habe folgendes App: (minimal reproduzierbares Beispiel)beibehalten Zoom in dygraph mit glänzenden Beobachtern

library(shiny) 
library(dygraphs) 
library(xts) 
runApp(
    list(
    ui = 
     mainPanel(
     tableOutput(outputId="dataTable") 
     ,dygraphOutput("testGraph") 
    ), 

    server = function(input, output, session) { 

     myReact <- reactiveValues(df = data.frame(time_stamp = as.integer(Sys.time()), foo = rnorm(1))) 

     readTimestamp <- function() Sys.time() 
     readValue <- function(){ 
     data.frame(time_stamp = as.integer(Sys.time()), foo = rnorm(1)) 
     } 
     data <- reactivePoll(5*1000, session, readTimestamp, readValue) # Add to data frame every x seconds 

     observe({ 
     myReact$df <- rbind(data(), isolate(myReact$df)) 
     }) 

     output$dataTable <- renderTable({ 
     head(myReact$df, 10) 
     }) 

     output$testGraph <- renderDygraph({ 
     x <- myReact$df 
     x.ts <- xts(x = x[,2], order.by = as.POSIXct(x[[1]], origin = "1970-01-01")) 
     dygraph(x.ts, main = "This should work") 

     }) 

    }) 
) 

Das Problem, das ich habe, ist: wenn ein Benutzer zoomt und die reactivePoll() führt (In diesem Fall, alle 5 Sekunden), wodurch die reaktiven Werte() angehängt werden, wird der Dygraph erneut gerendert und verkleinert. Gibt es eine Möglichkeit, den Zoom beizubehalten?

Antwort

1

Shout-out auf Github @jjallaire mich für die Unterstützung mit diesem aus: https://github.com/rstudio/dygraphs/issues/162

Grundsätzlich alles, was Sie tun müssen, ist ein zusätzliches Argument in dyOptionsretainDateWindow wie so genannte hinzufügen:

dygraph(x.ts, main = "This should work") %>% 
    dyOptions(retainDateWindow = TRUE)