显示绘图对象时,Shiny中的性能问题

时间:2019-07-04 17:06:29

标签: r plotly shinydashboard

我使用此功能创建一个绘图对象:

aligned_plot <- function(a_data, mapping, col_vector, col_label) {
  color <- NULL
  x_aes <- "rank"
  y_aes <- "case_rank"  

  Max_Dim <- max(a_data$case_rank)
  Max_Rank <- max(a_data$rank)
  Max_Case_Rank <- max(a_data$case_rank)  

  a_data %>%
    ggplot(aes_string(x = x_aes, y = y_aes)) +
    scale_x_discrete(drop = FALSE) + scale_y_discrete(drop = FALSE) +
    labs(x = "Activitys", y = "Traces") +
    theme_light()-> p

  if (Max_Dim > 400)
    p + geom_point(aes(color  = Activity)) + scale_color_manual(name =     col_label, values = col_vector) -> p
  else {
    p + geom_raster(aes(fill  = Activity)) +
      geom_vline(xintercept   = seq(.5, Max_Rank, by = 1), color = "gray90") +
      geom_hline(yintercept   = seq(.5, Max_Case_Rank, by = 1), color = "gray90") +
      scale_color_manual(name = col_label, values = col_vector) -> p
  }
  return(p)
}

在RStudio中以交互方式调用此函数时,创建绘图需要0.43秒。

此功能在Shinydashboard中使用:

  output$Aligned_Chart        <- renderUI({
    addSpinner(plotlyOutput(ns("Aligned_Chart_Plotly"), height = 700),  spin = "fading-circle", color = Spinner_Kleur)
  })
  output$Aligned_Chart_Plotly <- renderPlotly({
    P_data <- rv$Doorloop_events
    P_Map  <- mapping(P_data)
    P_data %>%  aligned_data() %>% .$In_Scope %>% 
      aligned_plot(P_Map, col_vector(),
             activity_id(P_data)) %>%
      ggplotly()
  })

现在执行aligned_plot()大约需要2:20分钟。谁能解释造成延迟的原因? (Max_Dim是一个便利变量,其值为130,因此aligned_plot()会生成geom_raster)

弄清楚如何添加微调框后,我可以跳过输出$ Aligned_Chart。但是创建图表仍然需要大约2分钟,因此我决定使用renderPlot:

output$Aligned_Chart_Plot <- renderPlot({
  P_data <- rv_mod$Doorloop_events
  P_Act  <- activity_id(rv_mod$Doorloop_events)
  P_Map  <- mapping(P_data)
  P_data %>% aligned_data() %>% .$In_Scope -> P_data
  A_Plot <- aligned_plot(P_data, P_Map, col_vector(), P_Act)
  A_Plot
})  

aligned_data()使用boxplot()检测异常值,默认情况下,箱线图返回图。 renderPlot()而不是返回geom_raster,而是绘制了箱线图。通过将boxplot()替换为UnivariateOutlierDetection()可以解决此问题。现在需要4秒钟来渲染我的情节。
但是,如按绘制方式进行渲染时,仍然需要1分钟的时间来渲染ggplotly()创建的对象。

花很多时间正常吗?

0 个答案:

没有答案