使用POSIXct日期范围的可缩放闪亮图

时间:2016-06-02 07:49:39

标签: r datetime zoom shiny

我正在尝试修改我的闪亮代码,以便我的情节可以缩放。

问题是,我的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”。 我知道我仍然将lowerlimitupperlimit作为scale_x_datetime参数,但我仍然希望如此,并且轴限制仅在部分情节时发生变化已被选中放大。

1 个答案:

答案 0 :(得分:2)

尝试用daxgraph绘制x轴缩放

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)