2016-04-14 13 views
0

私は、ggplot2プロットでx軸の制限を設定するためにdateRangeInputからの出力を使用するR/shinyアプリケーションで作業しています。 dateRangeInputを使用してデータをサブセット化すると問題はありませんが、dateRangeInputによって返された日付を認識するためにscale_x_date(またはscale_x_continuousまたはscale_x_datetime)を取得できません。私はformat()、as.Date、as.POSIXctを使ってみましたが、何の幸運もありませんでした。私は私が手dateRangeInputの出力を変換しようとするかどうかは:shiny dateRangeInputを使用してggplotの軸制限を設定する

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) 

答えて

2

問題があなたの元dataです。 ggplotがDateオブジェクトを予期しているときにPOSIXctを使用しました。

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

scale_x_dateには2つの制限値があると想定されていることに注意してください。これを必ず

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

に変更してください。素晴らしい再生可能な例をお寄せいただきありがとうございます。

+0

ありがとうジョン!私はtp_date_pressedがPOSIXctとして供給されたときにggplotが魔法のように正しいことをするので、scale_x_dateの入力$ dateを使って頭を叩きました。軸のデータと軸の制限が同じオブジェクトタイプである必要があることは私には決してありませんでした。 – blongworth

関連する問題