Имитация визуализации данных в реальном времени с помощью Shiny - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю 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)

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны использовать reactiveValues, чтобы добавить свой вектор, и использовать reactiveTimer с observeEvent, чтобы вызывать его каждую секунду

Кроме того, если вы хотите использовать renderPlotly в server, вы должны использовать plotlyOutput вместо plotOutput в ui

Попробуйте это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...