【问题标题】:Improving rCharts performance when plotting thousands points绘制千点时提高 rCharts 性能
【发布时间】:2015-03-12 12:36:23
【问题描述】:

我正在尝试使用 rCharts 包绘制数千个点,但我发现使用默认参数有点慢。我尝试将 turboThresold 参数设置为 0,但没有帮助。

这是性能表:

  • 绘制 100 个点:00.05 秒
  • 绘制 1000 个点:00.54 秒
  • 绘制 10000 个点 : 17.00 s

任何人都可以提高这段代码的性能吗?

library(shiny)
library(rCharts)
runApp(
  # User interface with 1 select box, 1 graph and 1 timer
  list(ui = pageWithSidebar(  
    headerPanel(""),  
    sidebarPanel( 
      selectInput("value",NULL,choices=c(100,1000,10000), selected = 100)
    ),
    mainPanel(       
      showOutput("plot", "highcharts"),
      textOutput("timer")
    )   
  ), 
  # server side
  server = function(input, output){
    values<-reactiveValues()
    values$timer <- NULL
    # generating highcharts plot
    output$plot <- renderChart2({
      x <- 1:input$value
      df <- data.frame(x, x^2)
      names(df) <- c("x","xpower2")
      values$timer <- Sys.time()
      plot <- Highcharts$new()
      plot$series(
        data = toJSONArray2(df, json = F, names = F),
        name = "xpower2",
        type = "line"
      )
      plot$plotOptions(series=list(turboThreshold=0))
      return(plot)
    })
    # calculating time 
    output$timer <- renderText({
      input$value
      isolate({
        values$timer <- Sys.time() - values$timer
        return(paste("Time elapsed :", round(values$timer,3) , "seconds"))
      })
    })
  }
  )
)

感谢您的帮助, 马特

【问题讨论】:

  • 这些命令也无济于事:plot$plotOptions(series=list(animation = FALSE,enableMouseTracking =FALSE))
  • 尝试禁用阴影/动画/标记
  • 嗨塞巴斯蒂安。遗憾的是没有改善。
  • 您是否尝试过原生 Highcharts js,而不是 rCharts?然后比较结果?
  • 不幸的是,我没能用我的 R Shiny 应用程序在原生 highchart 中创建图表。但是多亏了你的评论,我找到了 rHighcharts 包,它似乎有更好的性能,时间除以 5。所以谢谢你:)。如果你有任何 R 语言原生 highchart 的例子,无论如何都会很棒。

标签: r highcharts shiny rcharts


【解决方案1】:

一般来说,我建议使用任何浏览器图形包向浏览器发送不超过 3000 个点。选项是无穷无尽的,但取决于数据。除此之外,我无法使用rCharts 加快速度,但这里使用ggvis

library(shiny);library(ggvis)
runApp(
  list(ui = fluidPage(
  titlePanel('ggvis speed example'),  
  sidebarLayout(  
    sidebarPanel( 
      selectInput('points','Points To Plot',
                  choices=c(100,1000,10000,100000), selected = 1000)
    ),
    mainPanel(       
      ggvisOutput('ggvis')
    )   
  )), 
  server = function(input, output){
    reactive({
        1:input$points %>%             
        data.frame('x'=.,'y'=.^2) %>%
        ggvis(~x, ~y) %>% 
        layer_points() %>%
        add_axis("y", title_offset = 70) %>%
        add_tooltip(function(df) HTML(paste0('x: ',df$x,'<br>y: ',df$y)))
    }) %>% bind_shiny('ggvis')
  }
  )
)

【讨论】:

  • 由于某些原因,我不能使用“ggvis”包。我想我必须找到另一种展示我的系列的方式。我正在考虑将我的大系列抽样成较小的系列,选择正确的方法来获得相同的外观。
  • 热图?我确信有一些更清晰的方法可以显示这么多点,具体取决于目的。
  • 不是我的情况,我正在处理时间序列。
  • 如果可以的话,不妨试试dygraphshtmlwidgets.org/showcase_dygraphs.html
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多