繁体   English   中英

R Shiny ggplot 对 dateRangeInput 反应

[英]R Shiny ggplot reactive to dateRangeInput

我对 R 比较陌生,我正在尝试在 Shiny 中构建一个反应性 ggplot,其中 X 轴(日期)对 UI 中的 dateRangeInput 是反应性的。 我一直在谷歌搜索,但我尝试的每件事都会返回一个错误。

在 ggplot 中,来自名为 datecorrected_totals 的数据集的 aes() 调用,其中 x 是日期,y=load 是我希望对 dateRangeInput 做出反应的两个值,因此 ggplot 将根据时间段调整比例在日期范围输入中。

library(tidyverse)
library(shiny)
library(tidyr)
library(lubridate)
library(zoo)
data <- read_csv("--")

# Define UI ----
ui <- fluidPage(

  titlePanel("--"),

  sidebarLayout(
    sidebarPanel(
      h3("Calculator"), 
      dateRangeInput("dates", label = "Dates",
                     start = ("10-18-2018"),
                     end = max("05-29-2019"),
                     min = min("10-18-2018"),
                     max = max("05-29-2019"),
                     format = "mm-dd-yyyy"),
      sliderInput("slider_a", label = "--",
                  min = 0, 
                  max = 7, 
                  value = 0),
      sliderInput("slider_c", label = "--",
                  min = 7, 
                  max = 42, 
                  value = 7)
    ),
    mainPanel(plotOutput('bar_chart'))

  )
)

# Define server logic ----
server <- function(input, output, session) {

  RE <- reactive({

  })

  output$bar_chart <- renderPlot(

    ggplot(data = datecorrected_totals, aes(x = x, y = load)) +
           geom_bar(stat = "identity")
  )
}


# Run the app ----
shinyApp(ui = ui, server = server)

您需要按输入日期过滤原始数据集。 在此示例中, data将是您的原始数据集。

RE <- reactive({
  data %>% 
    filter(x>=input$dates[1] & x<=input$dates[2])
})

output$bar_chart <- renderPlot(

  ggplot(data = RE(), aes(x = x, y = load)) +
    geom_bar(stat = "identity") 

无需创建单独的reactive()表达式(除非另有要求)。 过滤器可以直接在renderPlot() 因此, output$bar_chart变成

  output$bar_chart <- renderPlot(
    datecorrected_totals %>%
      filter(between(x, input$dates[1], input$dates[2])) %>%
      ggplot(aes(x = x, y = load)) +
      geom_bar(stat = "identity")
  )

下面是一个独立的最小可重现示例

library(tidyverse)
library(lubridate)
library(shiny)

datecorrected_totals <- tibble(x = seq(as.Date("2018-10-18"), as.Date("2019-05-29"), length.out = 10L),
                               load = day(x))

# Define UI ----
ui <- fluidPage(

  titlePanel("--"),

  sidebarLayout(
    sidebarPanel(
      h3("Calculator"), 
      dateRangeInput("dates", label = "Dates",
                     start = mdy("10-18-2018"),
                     end = mdy("05-29-2019"),
                     min = mdy("10-18-2018"),
                     max = mdy("05-29-2019"),
                     format = "mm-dd-yyyy"),
    ),
    mainPanel(plotOutput('bar_chart'))

  )
)

# Define server logic ----
server <- function(input, output, session) {

  output$bar_chart <- renderPlot(
    datecorrected_totals %>%
      filter(between(x, input$dates[1], input$dates[2])) %>%
      ggplot(aes(x = x, y = load)) +
      geom_col()
  )
}

# Run the app ----
shinyApp(ui = ui, server = server)

请注意,已通过调用mdy()将日期字符串强制为有效的Date对象以避免错误消息。

此外, geom_bar(stat = "identity")已被geom_col()取代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM