2017-02-09 168 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