使用闪亮的dateRangeInput在ggplot中设置轴限制

时间:2016-04-14 20:29:07

标签: r ggplot2 shiny

我正在使用R / shiny应用程序,该应用程序使用dateRangeInput的输出在ggplot2图中设置x轴限制。使用dateRangeInput子集数据工作正常,但我无法获得scale_x_date(或scale_x_continuous或scale_x_datetime)来识别dateRangeInput返回的日期。我尝试过使用format(),as.Date,as.POSIXct,但是没有运气。无论我是否尝试转换dateRangeInput的输出,我都会得到:

Invalid input: date_trans works with objects of class Date only

这是一个(希望)可重现的问题示例:

library(shiny)
library(ggplot2)
library(dplyr)

tp_date_pressed <- as.POSIXct(c("2016-01-01", "2016-03-01"))
sigma <- c(1, 1.5)
data <- data.frame(tp_date_pressed, sigma)

ui <- fluidPage(
    dateRangeInput('date',
        label = 'Date Range',
        start = Sys.Date() - 180, 
        end = Sys.Date(),
        max = Sys.Date()
    ),
    plotOutput("plot")
)

server <- function(input, output) {
  subData <- reactive({
    data %>%
      filter(
        as.Date(tp_date_pressed) >= as.Date(input$date[1]),
        as.Date(tp_date_pressed) <= as.Date(input$date[2])
      )
  })

  output$plot <- renderPlot({
    ggplot(subData(), aes(tp_date_pressed, sigma)) +
      geom_point() +
      scale_x_date(limits = input$date)
  })

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:2)

问题出在原来的data上;当ggplot需要Date对象时,你使用了POSIXct。如果将其更改为

tp_date_pressed <- as.Date(c("2016-01-01", "2016-03-01"))

请注意,由于scale_x_date需要两个限制值,因此存在更多问题。请务必将其更改为

scale_x_date(limits = c(input$date[1], input$date[2]))

感谢可重复的好例子。