R zoomChart闪亮
R zoomChart Shiny
我一直在尝试使用 zoomChart
和 shiny
以交互方式放大 chartSeries 的某些部分,但找不到正确的解决方案。我会使用 dateRangeInput
或滑块,但我不确定如何将 quantmod
的 zoomChart-option 与 shiny
连接起来。正如您可能已经假设的那样,我对 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)
}
其实,你们很亲近。请注意 dateRangeInput()
中的更改:使用开始和结束参数代替最小值、最大值。然后你可以使用 server-side 上的输入来使用 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()
.
获得
我一直在尝试使用 zoomChart
和 shiny
以交互方式放大 chartSeries 的某些部分,但找不到正确的解决方案。我会使用 dateRangeInput
或滑块,但我不确定如何将 quantmod
的 zoomChart-option 与 shiny
连接起来。正如您可能已经假设的那样,我对 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)
}
其实,你们很亲近。请注意 dateRangeInput()
中的更改:使用开始和结束参数代替最小值、最大值。然后你可以使用 server-side 上的输入来使用 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()
.