2017-02-09 333 views
1

我一直在試圖與zoomChartshiny ChartSeries中的某些部分交互放大,卻找不到合適的解決方案。我會用dateRangeInput或滑塊,但我不知道如何將zoomChart選項從quantmodshiny連接。正如你可能已經假設的那樣,我相對比較新鮮,非常感謝你的建議![R zoomChart閃亮

編輯:數據是在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(index(data))'應該是... – drmariod

+0

我正在使用xts數據,所以date_range應該只是日期 - 數據 – Simon

回答

2

其實,你是非常接近的。注意dateRangeInput()的變化:開始和結束的說法來代替最小值,最大值。然後你可以使用服務器端的輸入使用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()得到在這種情況下。

+1

非常感謝!這很好用!感謝您的建議,下次我會提供可複製的數據。 – Simon