【问题标题】:Simulate real time data visualization using Shiny使用 Shiny 模拟实时数据可视化
【发布时间】:2019-02-16 16:20:24
【问题描述】:

我正在创建一个 POC,实时更新将反映在我闪亮的应用程序上。这个想法是绘制从服务器生成的数据的频率分布。因为我还没有访问服务器的权限,所以我模拟了一个数据创建,我将它提供给我的情节。我可以在控制台上正确查看数据,但我的应用程序上没有显示任何内容。我确信我错过了一些东西。我认为我无法查看绘图的原因是因为数据的更新速度比渲染速度快。有什么办法可以修改。

library(shiny)
library(magrittr)
library(plotly)


ui <- shinyServer(fluidPage(
  plotOutput("plot")
))


alarms = c("NodeDown","GrowthRate","DecayRate","DiskFull","ServiceDown","Planned_shutdown","etc.....etc","ServerOutage",
           "No Casue")

server <- shinyServer(function(input, output, session){
  # Function to get new observations
  get_new_data <- function(){

    new = sample(alarms,1)
#    data <- new %>% rbind %>% data.frame
    return(new)
  }

  # Initialize my_data
  my_data <<- get_new_data()

  # Function to update my_data
  update_data <- function(){
    my_data <<- c(get_new_data(), my_data)

  }

  output$plot <- renderPlotly({

    invalidateLater(1000, session)
    update_data()
#    print(my_data)
    dd = update_data()
    dd = as.data.frame(table(dd))
    print(dd)
    plot_ly(dd, x = ~dd, y = ~Freq)
  })

  # Plot the 30 most recent values
#  output$first_column <- renderPlot({
#    print("Render")
#    invalidateLater(1000, session)
#    update_data()
#    print(my_data)
#    plot(X1 ~ 1, data=my_data[1:30,], ylim=c(-3, 3), las=1, type="l")
#  })
})

shinyApp(ui=ui,server=server)

【问题讨论】:

    标签: r shiny r-plotly


    【解决方案1】:

    您应该使用reactiveValues 附加您的向量,并使用reactiveTimerobserveEvent 每秒触发一次

    另外,如果你想在server中使用renderPlotly,你应该在ui中使用plotlyOutput而不是plotOutput

    试试这个:

    library(shiny)
    library(magrittr)
    library(plotly)
    
    
    ui <- shinyServer(fluidPage(
      plotlyOutput("plot")
    ))
    
    
    alarms = c("NodeDown","GrowthRate","DecayRate","DiskFull","ServiceDown","Planned_shutdown","etc.....etc","ServerOutage",
               "No Casue")
    
    server <- shinyServer(function(input, output, session){
      get_new_data <- function(){
        new = sample(alarms,1)
        return(new)
      }
    
      my_data <-reactiveValues(data=get_new_data())
    
      observeEvent(reactiveTimer(2000)(),{ # Trigger every 2 seconds
        my_data$data<-c(get_new_data(),my_data$data)
        print(my_data$data)
      })
    
      output$plot <- renderPlotly({
        dd=as.data.frame(table(my_data$data))
        print(dd)
        plot_ly(dd, x = ~Var1, y = ~Freq)
      })
    
    })
    
    shinyApp(ui=ui,server=server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 2021-11-10
      • 1970-01-01
      • 2021-12-30
      • 2019-03-10
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多