R zoomДиаграмма Shiny

Я пытался интерактивно увеличить определенные части диаграммы с помощью zoomChart и shiny, но не могу найти правильное решение. Я бы использовал dateRangeInput или ползунок, но я не уверен, как соединить опцию zoomChart из quantmod с shiny. Как вы, наверное, уже догадались, я относительно новичок в блестящем и очень благодарен за ваши советы!

редактировать: данные в формате xts.

Мой код:

library(quantmod)
library(shiny)

date_range <- as.POSIXct(index(data))
if (interactive()) {
  options(device.ask.default = FALSE)
  ui <- fluidPage(  
    titlePanel("Select Range to zoom-in:"),
    sidebarLayout(
      sidebarPanel(
        dateRangeInput("Range", "Choose Date Range:", min=first(date_range),
                   max=last(date_range), format = "dd-mm-yyyy")
      ),
      mainPanel(
        plotOutput("Plot")
      )
    )
  )

  server <- function(input, output) {
    output$Plot <- renderPlot({
      chartSeries(data, type = c("auto", "candlesticks", "matchsticks",   "bars","line"), 
              theme=chartTheme("white"), name=paste(start(data), end(data),sep = " ")) 
      zoomChart(dateRangeInput) 
    })
  }
   shinyApp(ui, server)
}

person Simon    schedule 09.02.2017    source источник
comment
что date_range <- as.POSIXct(index(data)) должно быть...   -  person drmariod    schedule 09.02.2017
comment
Я использую данные xts, поэтому date_range должен быть просто датой-данными.   -  person Simon    schedule 09.02.2017


Ответы (1)


На самом деле, вы были очень близки. Обратите внимание на изменения в dateRangeInput(): аргумент start и end используются вместо min, max. И тогда вы можете использовать ввод на стороне сервера, чтобы использовать zoom-chart.

library(quantmod)
library(shiny)
getSymbols("YHOO")
data <- YHOO
date_range <- index(data)
if (interactive()) {
  options(device.ask.default = FALSE)
  ui <- fluidPage(  
    titlePanel("Select Range to zoom-in:"),
    sidebarLayout(
      sidebarPanel(
        dateRangeInput("Range", "Choose Date Range:", start=first(date_range),
                       end=last(date_range), format = "yyyy-mm-dd")
      ),
      mainPanel(
        plotOutput("Plot")
      )
    )
  )
  server <- function(input, output) {
    output$Plot <- renderPlot({
      chartSeries(data, type = c("auto", "candlesticks", "matchsticks",   "bars","line"), 
                  theme=chartTheme("white"), name=paste(start(data), end(data),sep = " ")) 
      zoomChart(paste(input$Range, collapse = "::")) 
    })

    observe({
      print(input$Range)
    })
  }
  shinyApp(ui, server)
}

Как указал @drmariod, было бы полезно иметь полностью воспроизводимый пример, который в этом случае было легко получить через getSymbols().

person Tonio Liebrand    schedule 09.02.2017
comment
Большое спасибо! Это отлично работает! И спасибо за совет, я предоставлю воспроизводимые данные в следующий раз. - person Simon; 09.02.2017