R Shiny Highcharter - 无需完全重新加载即可添加系列

时间:2016-11-24 17:56:27

标签: r highcharts shiny

我正在使用highcharter软件包在R-Shiny项目上绘制财务时间系列,我希望允许用户在图表上添加指标(例如移动平均线)。为了做到这一点,我在服务器端的hc_add_series_xts()语句中调整了if。它工作正常,但每次有人添加一个指标,图表完全重新加载,而我更喜欢动态更新。有没有办法实现呢?

为了更好地解释我的情况,它遵循单页Shiny示例:

library(shiny)
library(quantmod)
library(highcharter)
library(TTR)


ui <- fluidPage(

      mainPanel(
        highchartOutput("hc"),
        checkboxInput("indicator","Add Moving Average")
      )
)


server <- function(input, output) {

  output$hc <- renderHighchart({

    y <- getSymbols("MSFT", auto.assign=FALSE)

    hc <- highchart() %>%
          hc_exporting(enabled = TRUE)%>%
          hc_add_series_ohlc(y) %>% 
          hc_add_theme(hc_theme_538(colors = c("red", "blue", "green"),
                                    chart = list(backgroundColor = "white") ))

    if(input$indicator){hc <- hc %>% hc_add_series_xts(name = "Moving Average", EMA(Cl(y)))}

    return(hc)
  })

}


shinyApp(ui = ui, server = server)

PS:我故意将所有历史价格称为可用的,以便让人感觉到“完整的真实”事件。

2 个答案:

答案 0 :(得分:1)

目前无法使用shiny更新图表,如您所见,绘制新图表。

你试过hc_legend(enabled = TRUE)吗?因此,您可以显示或隐藏点击图例的系列。

hc <- highchart() %>%
  hc_exporting(enabled = TRUE)%>%
  hc_add_series_ohlc(y) %>% 
  hc_add_theme(hc_theme_538(colors = c("red", "blue", "green"),
                            chart = list(backgroundColor = "white") )) %>% 
  hc_add_series_xts(name = "Moving Average", EMA(Cl(y)), visible = FALSE) %>% 
  hc_legend(enabled = TRUE)

hc

希望这个帮助

答案 1 :(得分:0)

以你的例子为例,jbkunst方法比我的好得多。特别是因为图形的渲染(在ui中)比建立它所花费的时间长得多(在server中)。

但是在某些情况下,将基本对象加载到server函数的变量中,然后在选择它们时仅添加新指标的解决方案可以改善延迟:

server <- function(input, output) {
  y <- getSymbols("MSFT", auto.assign=FALSE)
  hc <- highchart() %>%
          hc_exporting(enabled = TRUE)%>%
          hc_add_series_ohlc(y) %>% 
          hc_add_theme(hc_theme_538(colors = c("red", "blue", "green"),
                                    chart = list(backgroundColor = "white") ))

  output$hc <- renderHighchart({
    hc_now <- hc
    if(input$indicator){hc_now <- hc_now %>% hc_add_series_xts(name = "Moving Average", EMA(Cl(y)))}
    return(hc_now)
  })
}

首次加载需要一段时间,但更改指标需要的时间更少