根据DateRangeInput用户选择更新库存线图-Shiny App

时间:2020-02-16 21:13:32

标签: r ggplot2 shiny

我正在使用Quantmod中的库存数据,正在寻找一种在闪亮的应用程序中使用DateRangeInput的方法,并将用户选择反映在ggplot图中。

ui <- fluidPage(
  titlePanel("Stock App"),

  mainPanel(
    selectInput("stock", "Select a Stock(s):", choices = unique(all_stocks_df$Stock), multiple = TRUE, selected = "AAPL"),
    dateRangeInput("daterange", "Select a timeframe to be plotted", start = "2010-01-01", end = "2020-01-01")),

  tabsetPanel(
    tabPanel("Line Graph", plotOutput("line"))

  )
)

server <- function(input, output, session) {
  output$line <- renderPlot({
    stock_subset <- subset(all_stocks_df, Stock == input$stock)
    ggplot () + 
      geom_line(aes(x=input$daterange, y=Close, color = Stock),
                data = stock_subset)
  })


}

shinyApp(ui=ui, server=server)

我正在生成的all_stocks_df数据帧如下所示:

Date       Close     Stock 
2019-12-31 293.65     AAPL 
... 
2007-01-03 11.97      AAPL 

2019-12-31 1847.84    AMZN 
... 
2007-01-03 38.70      AMZN 

当我输入input$daterange线图的X参数作为ggplot时,它不起作用。理想情况下,用户可以更改时间范围,并且图形可以更新。

1 个答案:

答案 0 :(得分:1)

对于子集,将使用%in%而不是==,因为您可以在selectInput中选择多个股票。在绘制之前,也可以通过input$daterange进行过滤/设置。

server <- function(input, output, session) {
  output$line <- renderPlot({
    stock_subset <- subset(all_stocks_df, Stock %in% input$stock & Date>= input$daterange[1] & Date <= input$daterange[2])
    ggplot () + 
      geom_line(aes(x=Date, y=Close, color = Stock), data = stock_subset)
  })
}