rAmCharts: извлечь диапазоны дат из полосы прокрутки и реализовать несколько осей - PullRequest
0 голосов
/ 15 мая 2019

Я хочу использовать пакет rAmCharts в своем блестящем приложении в основном для графиков временного ряда (я хочу заменить dygraphs графики). В целом, оболочка R хорошо документирована , но я все еще пытаюсь понять, как реализовать следующие функции:

  • извлечение минимальной и максимальной дат из chart.ScrollBarX - см. Пример вертикальной полосы прокрутки в оригинале amCharts pkg здесь . Например, dygraphs эквивалент будет input$dygraph_date_window[1] & input$dygraph_date_window[2] (если объект графика называется dygraph) и

  • создайте несколько осей Y: вот оригинальный пример . Эквивалентом в dygraphs является добавление / изменение name и valueRange аргументов в dygraphs::dyAxis() или указание axis аргумента в dygraphs::dySeries().

  • сюжетные пули: отличный пример тех, в оригинальном pkg можно найти здесь . Эквивалент в dygraphs будет dyAnnotations(), что очень сложно. Здесь вы можете найти пример блестящего приложения, которое их использует.

Ниже вы найдете простое приложение Shiny, иллюстрирующее обе функции. Код взят из этого поста .

library(xts)
library(shiny)
library(shinydashboard)
library(dygraphs)
library(dplyr)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    dygraphOutput('plot1')
  )
)

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

  m_df <- data.frame(date=as.Date(zoo::as.yearmon(time(mdeaths))), Y=as.matrix(mdeaths))

  subdata <- reactive({
    if(!is.null(input$plot1_date_window)){
      subdata <- m_df[m_df$date >= as.Date(input$plot1_date_window[1]) & m_df$date <= as.Date(input$plot1_date_window[2]), ]
      subdata$cumsum <- cumsum(subdata$Y)
      subdata$Y <- NULL
    } else {
      subdata <- NULL
    }

    return(subdata)
  })

  subdata_d <- subdata %>% debounce(100)

  output$plot1 <- renderDygraph({
    input_xts <- xts(select(m_df, -date), order.by = m_df$date)
    if(is.null(subdata_d())){
      final_xts <- input_xts
    } else {

      subdata_xts <- xts(select(subdata_d(), - date), order.by = subdata_d()$date)
      final_xts <- cbind(input_xts, subdata_xts)
    }

    p <- dygraph(final_xts) %>% dySeries(name="Y") %>%
      dyRangeSelector(retainDateWindow = TRUE)

    if("cumsum" %in% names(final_xts)){
      p <- dySeries(p, name="cumsum", axis = "y2")
    }

    p
  })

}

shinyApp(ui, server)
...