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.
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
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
überprüfen Sie diese http://shiny.studio.com/gallery/plot-interaction-zoom.html –