R Shiny应用程序:修改绘图而不重新渲染它

时间:2016-06-20 19:32:50

标签: r plot ggplot2 shiny dygraphs

我一直在寻找在R Shiny应用程序中更新绘图的方法,而无需重新渲染整个绘图。我正在处理通过Slider InputanimationOptions(playButton = TRUE))设置动画的时态数据。我们的想法是以某种方式突出显示通过Slider Input选择的情节部分。在每个动画步骤重新渲染整个绘图会使整个应用程序无用地变慢。

ggplot2最优雅的解决方案是,如果闪亮提供了一种向ggplot添加图层的方法(例如+ geom line()),并将该图层无缝地集成到图中而无需重新渲染。可悲的是,this does not seem to work。一点点破解可能包括创建第二个ggplot - 具有完全相同的x / y维度并重叠两个图的实例。

修改 我刚刚了解到有更多面向javascript的绘图方法而不是ggplot2。例如,使用dygraphs并添加dyShading图层,可以很好地突出显示所选区域。但基本问题仍然相同,因为更改dyShading()的起始值和结束值似乎需要重新渲染整个图。

Highlighting selected area with dyShading

library(shiny)
library(dygraphs)
library(xts)


data <- data.frame(
  datetime = as.POSIXct("2016-06-20 17:00:00", tz = "UTC") + 1:100*60,
  y = rnorm(100)
)

data_xts <- as.xts(data[,-1], data[,1])

minDatetime <- min(data$datetime)
maxDatetime <- max(data$datetime)
minY = min(data$y)
maxY = max(data$y)
plotlimits <- lims(x = c(minDatetime, maxDatetime), y = c(minY, maxY))


ui <- fluidPage(
  sliderInput("timeslider", "Time Slider",
              min = minDatetime,
              max = maxDatetime,
              value = c(minDatetime, minDatetime+10*60),
              animate = animationOptions(interval=200)
              ),
  dygraphOutput("dyplot")
)

server <- function(input, output) {

  data_fil <- reactive({
    data[data$datetime <= input$timeslider[2] & data$datetime >= input$timeslider[1],]
  })

  output$dyplot <- renderDygraph({
    dygraph(data_xts) %>%
      dyShading(
        from = as.character(input$timeslider[1]), 
        to = as.character(input$timeslider[2]),
        color = "tomato")
  })

}

shinyApp(ui = ui, server = server)

0 个答案:

没有答案