2017-02-09 5 views
1

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

Редактировать: Данные находятся в формате xts.

MyCode:

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) 
} 
+2

Что такое 'date_range <- as.POSIXct (индекс (данные))' предполагается ... – drmariod

+0

Я использую данные xts, поэтому date_range должен быть только датами-данными – Simon

ответ

2

На самом деле, вы были очень близки. Обратите внимание на изменения в 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 указано Было бы полезно иметь полностью воспроизводимый exmaple, что было легко получить в этом случае с помощью getSymbols().

+1

Большое спасибо! Это работает отлично! И спасибо за консультацию, я буду приводить воспроизводимые данные в следующий раз. – Simon