【问题标题】:Zoomable shiny plot using POSIXct date ranges使用 POSIXct 日期范围的可缩放闪亮图
【发布时间】:2016-06-02 07:49:38
【问题描述】:

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

问题是,我的 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)

但我收到一条错误消息,提示 “必须提供来源”。 我知道我仍然有我的lowerlimit 987654329 @作为scale_x_datetime参数,但我仍然希望这是这样的,轴限制只有在选择绘图的一部分缩放时才会改变.

【问题讨论】:

标签: r datetime zooming shiny


【解决方案1】:

尝试 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)

【讨论】:

  • 我会看看dygraph - 谢谢。 (我必须找到一种方法来使我的日期范围能够工作,因为当我使用它时这似乎会产生一个直线图......)
  • 感谢您查看此内容,但似乎我无法将我的数据格式更改为时间序列,因为它还包含其他数据列(分组 ID)。你知道任何使用ggplot2的方法吗?
  • 这就是我用来在问题中创建尝试的方法。
猜你喜欢
  • 2020-12-23
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2019-05-13
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
相关资源
最近更新 更多