【问题标题】:Extract dyRangeSelector values from dygraph in shiny app在闪亮的应用程序中从 dygraph 中提取 dyRangeSelector 值
【发布时间】:2017-02-13 00:22:54
【问题描述】:

我一直在使用 dygraphs 库将一些非常漂亮的时间序列图放在一个闪亮的应用程序中。我特别喜欢将groupgroup 参数与dyRangeSelector 结合使用来同步多个dygraphs 的缩放级别。

有没有办法让 other 闪亮的输出响应用户对范围选择器的操作?以这个示例应用为例,它显示了一个简单的 dygraph 并将系列汇总在下表中:

# app.R
library(shiny)
library(dygraphs)
library(dplyr)

indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]

ui <- fluidPage(
  dygraphOutput("plot"),
  tableOutput("table")
)

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

  output$plot <- renderDygraph({
    indoConc %>%
      dygraph %>%
      dyRangeSelector
  })

  output$table <- renderTable({
    indoConc %>%
      filter(time >= min(indoConc$time), time <= max(indoConc$time)) %>%
      summarise(total_conc = sum(conc))
  })
})

shinyApp(ui, server)

我希望该表仅对用户当前选择的时间间隔求和。这意味着将filter 行更改为使用那些最小/最大点以外的其他内容(这会导致不过滤)。

如何以适当的格式从范围选择器中提取这两个值,以便在 filter 调用中使用它们,并在用户移动滑块时响应式更新表格?

【问题讨论】:

  • 我可以看到有一些隐藏的输入,例如 plot_date_window 我可以使用,感谢这个答案:stackoverflow.com/questions/30955578/…。现在的诀窍是从中提取我的非时间序列 y 值;有可能吗?

标签: r shiny dygraphs


【解决方案1】:

由于dataframe 中的time 变量是3 位变量,我建议您将datetime 对象转换为character,然后选择您需要的最后3 位数字,并将其粗化为numeric 以供进一步使用,如下所示:

rm(list = ls())
library(shiny)
library(dygraphs)
library(dplyr)
library(stringr)

indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]
takeLastnvalues <- -3
ui <- fluidPage(dygraphOutput("plot"),tableOutput("table"))

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

  values <- reactiveValues()  
  observeEvent(input$plot_date_window,{
    value1 <- input$plot_date_window[[1]]
    value2 <- input$plot_date_window[[2]]
    value1 <- sub("Z", "", value1)
    value2 <- sub("Z", "", value2)
    value1 <- str_sub(value1,takeLastnvalues,-1)
    value2 <- str_sub(value2,takeLastnvalues,-1)
    values$v1 <- as.numeric(value1)
    values$v2 <- as.numeric(value2)
  })

  output$plot <- renderDygraph({
    indoConc %>%
      dygraph %>%
      dyRangeSelector
  })

  output$table <- renderTable({
    indoConc %>%
      filter(time >= min(values$v1), time <= max(values$v2)) %>%
      summarise(total_conc = sum(conc))
  })
})

shinyApp(ui, server)

【讨论】:

  • 请注意,您只能提取整数。 (在你的截图中values$v1 = 2values$v2 = 4
  • @GyD 我也注意到了;这是给定我的设置的固有限制,还是有办法获得这些端点的“完整”值?
  • 我正在努力解决这个问题,但它与dygraphsitself 有关,其中时间戳仅达到毫秒范围,并且已经有一些与此相关的票证。但是您可以将 timevariable 修改为以千为单位,然后在选择时将其修改回来
  • @PorkChop 啊,我明白了,这就是我担心的情况,但至少有一个解决方法。您介意在此处链接这些上游票证以供参考吗?
  • 一些票在这里654, 46, 118。他将最多 3 位数的日期时间对象显式转换为毫秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2015-07-22
  • 2013-07-08
  • 2017-03-10
  • 2016-12-20
  • 2016-06-02
  • 2016-02-03
相关资源
最近更新 更多