2016-06-02 7 views
0

Ich versuche, meinen glänzenden Code zu ändern, damit meine Handlung zoombar gemacht wird.Zoombares glänzendes Plot mit POSIXct-Datumsbereichen

Das Problem ist, meine X-Achse verwendet as.POSIXct Daten als ihre Grenzen.

Zum Beispiel kann eine Arbeitsversion der aktuellen App ist:

library(shiny) 
ui <- fluidPage(selectInput(inputId = "data",label="Make a choice", choices=c("A","B")), 
       plotOutput("plot1"),dateInput(inputId = "lowerlimit", label="Lower Date",value="2016-01-01"), dateInput(inputId = "upperlimit",label="Upper Date")) 

server <- function(input,output){ 
    output$plot1 <- renderPlot({ 
    dates=seq(as.POSIXct("2016-01-01 00:00:00",tz="UTC"), as.POSIXct("2016-06-01 23:45:00",tz="UTC"),by="15 min") 
    values=rnorm(14688) 
    data=data.frame(Date=dates,Data=values) 
    ggplot(data, aes(Date, Data))+geom_line()+ 
     scale_x_datetime(limits=c(as.POSIXct(input$lowerlimit), as.POSIXct(input$upperlimit)), labels = date_format("%d-%m-%y"))+ylab("")+ 
     ggtitle("My Plot")+xlab("") 
    }) 
} 

shinyApp(ui=ui, server=server) 

Allerdings möchte ich plot1 zoombaren machen. Ich habe versucht, diese example zu folgen, aber da meine x-Achse Daten verwendet, scheint es nicht zu funktionieren.

Ich habe versucht:

library(shiny) 
ui <- fluidPage(selectInput(inputId = "data",label="Make a choice", choices=c("A","B")), 
       plotOutput("plot1",dblclick = "plot1_dblclick", brush = brushOpts(id="plot1_brush",resetOnNew = T)), 
       dateInput(inputId = "lowerlimit", label="Lower Date",value="2016-01-01"), 
       dateInput(inputId = "upperlimit",label="Upper Date")) 

server <- function(input,output){ 

    ranges <- reactiveValues(x = NULL, y = NULL) 

    output$plot1 <- renderPlot({ 

    if (!is.null(ranges$x)) { 
     ranges$x <- as.POSIXct(ranges$x, format = "%d-%m-%y",tz="UTC") 
    } 

    dates=seq(as.POSIXct("2016-01-01 00:00:00",tz="UTC"), as.POSIXct("2016-06-01 23:45:00",tz="UTC"),by="15 min") 
    values=rnorm(14688) 
    data=data.frame(Date=dates,Data=values) 

    ggplot(data, aes(Date, Data))+geom_line()+ 
     scale_x_datetime(limits=c(as.POSIXct(input$lowerlimit), as.POSIXct(input$upperlimit)), labels = date_format("%d-%m-%y"))+ylab("")+ 
     ggtitle("My Plot")+xlab("") 
    }) 
    observeEvent(input$plot1_dblclick, { 
    brush <- input$plot1_brush 
    if (!is.null(brush)) { 
     ranges$x <- c(brush$xmin, brush$xmax) 
     ranges$y <- c(brush$ymin, brush$ymax) 

    } else { 
     ranges$x <- NULL 
     ranges$y <- NULL 
    } 
    }) 
} 

shinyApp(ui=ui, server=server) 

Aber ich erhalte eine Fehlermeldung, die sagt "Origin muss geliefert werden". Ich weiß, dass ich noch meine lowerlimit und upperlimit als die scale_x_datetime Argumente habe, aber ich will immer noch dies der Fall sein, und die Achsengrenzen ändern sich nur, wenn ein Teil des Diagramms ausgewählt wurde, um hineinzuzoomen.

Antwort

2

Versuch dygraph plotten mit xaxis

https://rstudio.github.io/dygraphs/

library(shiny) 
library(dygraphs) 
ui <- fluidPage(selectInput(inputId = "data",label="Make a choice",   choices=c("A","B")), 
      dygraphOutput("plot1") 
) 
server <- function(input,output){ 
    output$plot1 <- renderDygraph({ 


data=as.ts(rnorm(14688),start="2016-01-01" ,end= "2016-06-01") 

dygraph(data) %>% dyRangeSelector(dateWindow = c("2016-01-01", "2016-06-01 23:45:00")) 

    }) 
} 

shinyApp(ui=ui, server=server) 
+0

vergrößern werde ich einen Blick auf 'dygraph' haben - Danke. (Ich muss einen Weg finden, um meine Zeiträume zu aktivieren, da dies scheint eine gerade Linie Grafik zu erzeugen, wenn ich es verwende ...) – sym246

+0

Vielen Dank für das Betrachten, aber es scheint, ich kann nicht ändern meine ändern Datenformat zu einer Zeitreihe, da es auch andere Datenspalten (Gruppierungs-IDs) enthält. Ist Ihnen irgendeine Methode bekannt, die 'ggplot2' verwendet? – sym246

+0

überprüfen Sie diese http://shiny.studio.com/gallery/plot-interaction-zoom.html –