2016-06-02 4 views
0

Я пытаюсь внести поправки в свой блестящий код, чтобы мой сюжет сделал масштабируемым.Масштабируемый блестящий сюжет с использованием диапазонов дат POSIXct

Проблема в том, что моя ось x использует as.POSIXct как лимиты.

Например, рабочая версия текущего приложения является:

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) 

Однако я хочу сделать plot1 масштабируемой. Я пытался следовать этому example, но поскольку моя ось x использует даты, она, похоже, не работает.

Я попытался:

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) 

Но я получаю ошибку, которая говорит "Origin должны быть поставлены". Я знаю, что у меня все еще есть мои lowerlimit и upperlimit как аргументы scale_x_datetime, но я все еще хочу, чтобы это было так, и ограничения по оси меняются только тогда, когда часть графика была выбрана для увеличения.

ответ

2

попытка dygraph построить с 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

Я посмотрю на 'dygraph' - Спасибо. (Мне нужно найти способ включения диапазонов дат, потому что это, кажется, создает график прямых линий, когда я его использую ...) – sym246

+0

Спасибо, что посмотрели на это, но, похоже, я не могу сменить меня формат данных для временного ряда, поскольку он также содержит другие столбцы данных (идентификаторы группировки). Вы знаете какой-либо метод, который использует 'ggplot2'? – sym246

+0

проверить это http://shiny.rstudio.com/gallery/plot-interaction-zoom.html –