Различные графики по разным датам в Ршинах - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь создать блестящее приложение, которое отображает пользовательский ggplot plot1 в зависимости от разных дат. Параметр plot1 равен days, который отображает различные даты, так как дни указаны соответственно. Тем не менее, я просто не могу понять, как интегрировать в серверную часть блестящей. Вот мой лучший подход:

# create sample data frame with dates
set.seed(1)
date = seq(Sys.Date(), by = "day", length.out = 30)
number = 100 * rnorm(30)
df = data.frame(date = date, number = number)
head(df)


# Plot
library(ggplot2)
library(shiny)
library(dplyr)

plot1 <- function(days) {
  df %>% filter(between(date, max(df$date) - days, max(df$date))) %>%

    ggplot(aes(x = date, y = number)) +
    geom_line() +
    theme_classic()
}

# Shiny
ui <- fluidPage(
    dateRangeInput(
    inputId = "daterange",
    label = "Select the date range",
    start = min(df$date), 
    end = max(df$date), 
  ),

  plotOutput("plotA") 
)

server <- function(input, output, session) {
  output$plotA <- renderPlot({
    plot1(input$daterange)
  })
}

shinyApp(ui, server)

1 Ответ

2 голосов
/ 24 марта 2020

Является ли filter маскированной функцией для вас? Вы можете попробовать использовать квалифицированный вызов функции для filter через dplyr::filter().

Кроме этого, как указал другой пользователь, input$daterange - это вектор с 2 значениями - "начало" (input$daterange[1]) и «конец» (input$daterange[2]). Вы упомянули, что пытались изменить input$daterange[1] или [2], но это не работает: я полагаю, это означает, что вы изменили свой вызов на plot(input$daterange) в server, верно? Вы должны изменить и указать это в своем объявлении этой функции. Поскольку вы определяете дату из input$daterange на основе уже min(df$date) и max(df$date), вы можете просто использовать days[1] и days[2] для ссылки на min и max пользовательского ввода. Может быть, так?

plot1 <- function(days) {
  df %>% dplyr::filter(between(date, days[1], days[2])) %>%

    ggplot(aes(x = date, y = number)) +
    geom_line() +
    theme_classic()
}

Наконец, у меня возникли некоторые проблемы с отображением графиков из ggplot в shiny приложениях. Для того, чтобы показать график, я сохраняю переменную, а затем подробно показываю график с print(). Пример:

myPlot <- ggplot(df, aes(x=..., y=...)) + geoms_...
print(myPlot)

Если я просто позвоню ggplot без print() после, это не всегда будет работать так, как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...