построить график R на основе ввода диапазона дат - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть такой график.Здесь я буду добавлять вход даты.На основании этого выбора мне нужно заново построить график.

Пример данных

dates    ex   act
NOV-17   77    90
DEC-17   98    78 
JAN-18   65    87
FEB-18   77    54
MAR-18   44    34

Пример кода:

   age <- plot_ly(data_, x = ~dates, y = ~ex, name = 'Expect', type = 'scatter',mode = 'lines+markers',
                                line = list(color = 'rgb(205, 12, 24)', width = 4)) %>%
        add_trace(y =~act , name = 'Actual',mode = 'lines+markers', line = list(color = 'rgb(170, 255, 102)', width = 4)) %>%
        layout(title = "Mon vs KM",
               xaxis = list(title = "Mon"),
               yaxis = list (title = "KM"),
               legend = list(orientation = 'h'))

Если мой выбор 2017-12-01 to 2018-03-01, то моя ось X должна быть от DEC-17 to MAR-18

Я знаю, чтобы закодировать, мне просто нужно знать, как фильтровать ось х

1 Ответ

0 голосов
/ 12 декабря 2018

Вот рабочий пример:

PS: Вы должны быть осторожны, используя сокращения названий месяцев, поскольку они зависят от региона.

library(shiny)
library(plotly)

ui <- fluidPage(
  titlePanel("Plotly - dateRangeInput"),
  sidebarLayout(
    sidebarPanel(
      dateRangeInput(inputId="myDateRange", label="", start = NULL, end = NULL, min = NULL, max = NULL)
    ),
    mainPanel(
      plotlyOutput("age")
    )
  )
)


server <- function(input, output, session) {

  data_ <- data.frame(stringsAsFactors=FALSE,
                      dates = c("NOV-17", "DEC-17", "JAN-18", "FEB-18", "MAR-18"),
                      ex = c(77L, 98L, 65L, 77L, 44L),
                      act = c(90L, 78L, 87L, 54L, 34L))

  data_$helperDates <- as.Date(paste0(data_$dates, "-01"), format="%b-%y-%d")

  data_ <- data_[order(data_$helperDates, decreasing = FALSE), ]
  data_$dates <- factor(data_$dates, levels = c(as.character(data_$dates)))

  minDate <- min(data_$helperDates, na.rm = TRUE)
  maxDate <- max(data_$helperDates, na.rm = TRUE)
  updateDateRangeInput(session, inputId="myDateRange", start = minDate, end = maxDate, min = minDate, max = maxDate)

  filteredData <- reactive({
    req(input$myDateRange)
    na.omit(data_[data_$helperDates >= input$myDateRange[1] & data_$helperDates <= input$myDateRange[2], ])
  })


  output$age <- renderPlotly({

    req({nrow(filteredData()) > 0})

    age <- plot_ly(filteredData(), x = ~dates, y = ~ex, name = 'Expect', type = 'scatter', mode = 'lines+markers',
                   line = list(color = 'rgb(205, 12, 24)', width = 4)) %>%
      add_trace(y =~act, name = 'Actual', mode = 'lines+markers', line = list(color = 'rgb(170, 255, 102)', width = 4)) %>%
      layout(title = "Mon vs KM",
             xaxis = list(title = "Mon"),
             yaxis = list (title = "KM"),
             legend = list(orientation = 'h'))
  })
}


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