【问题标题】:R Shiny Highcharter - Add series without full reloadR Shiny Highcharter - 添加系列而无需完全重新加载
【发布时间】:2017-04-09 02:37:03
【问题描述】:

我正在使用 highcharter 包在 R-Shiny 项目上绘制财务时间序列,我希望允许用户在图表上添加指标(例如移动平均线)。为了做到这一点,我在if 语句服务器端设置了hc_add_series_xts()。它工作正常,但每次有人添加指标时,图表都会完全重新加载,而我更喜欢动态更新。有什么办法吗?

为了更好地解释我的情况,它遵循一个单页闪亮的例子:

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:我故意将所有历史价格都称为可用,以使“完全重新加载”事件变得可感知。

【问题讨论】:

    标签: r highcharts shiny


    【解决方案1】:

    在你的例子中,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)
      })
    }
    

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

    【讨论】:

    • 使用你的代码我遇到了同样的问题:当你激活复选框时,图表完全重新加载。
    【解决方案2】:

    目前无法使用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
    

    希望有帮助

    【讨论】:

    • 这个技巧很好但是我不能使用它,因为我的项目包含很多指标,也可以通过数字输入框个性化更改一些参数。
    • 我明白了。我会做一些可以帮助解决这个问题的事情 (github.com/jbkunst/highcharter/issues/112)
    • 这真的很有趣!!我正在等待更多更新! :D
    猜你喜欢
    • 2016-03-26
    • 2014-02-11
    • 1970-01-01
    • 2019-02-06
    • 2017-11-15
    • 2019-10-25
    • 2021-01-23
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多