如何使用时间序列滑块过滤数据

时间:2019-05-12 22:29:13

标签: r ggplot2 shiny plotly

我正在尝试创建一个显示两个图的仪表板:

条形图时间序列图。

时间序列图具有一个滑块,我希望条形图仅显示滑块范围内的值。

我可以使用闪亮的滑块小部件,但我希望使用一个附加到时间序列图上的小部件。

1 个答案:

答案 0 :(得分:0)

这就是我想你所追求的:

library(shiny)
library(plotly)
library(data.table)

nPoints <- 100
DT <- data.table(x = Sys.time()-seq_len(nPoints), y = runif(nPoints, 0, 10))

ui <- fluidPage(
    plotlyOutput("scatterPlot"),
    plotlyOutput("barPlot")
)

server <- function(input, output, session) {

    output$scatterPlot <- renderPlotly({
        p_scatter <- plot_ly(
            DT,
            x = ~ x,
            y = ~ y,
            type = "scatter",
            mode = "lines"
        ) %>%
            layout(
                xaxis = list(
                    rangeslider = list(type = "date")
                    ))
    })

    xRangeRaw <- reactiveVal()
    xRange <- xRangeRaw %>% debounce(100)

    observeEvent(event_data("plotly_relayout"), {
        xRangeRaw(event_data("plotly_relayout")$xaxis.range)
        })

    output$barPlot <- renderPlotly({
        if(is.null(xRange())){
            filteredDT <- DT
        } else {
            filteredDT <- DT[x %between% as.POSIXct(xRange(), format = "%Y-%m-%d %H:%M:%OS")]
        }

        p_bar <- plot_ly(
            na.omit(filteredDT),
            x = ~ x,
            y = ~ y,
            type = "bar"
        )

    })
}

shinyApp(ui = ui, server = server)