Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

plotly graphs shows ERROR too many open devices in shiny

Tags:

r

shiny

plotly

I have about 10 ploty graphs converted from ggplot is in my shiny app, which is refreshing every 10 seconds. Plotly works fine for few refresh, but then shows ERROR too many open devices.

My code is as follows (shorted to just show one graph):

server.R

pullData is function that pulls data from database.

library(lubridate)
library(shinyjs)
library(ggplot2)
library(plotly)
server <- function(input, output, session) {


d <- reactive({
  invalidateLater(10000, session)
  pullData() %>% filter(!is.na(time))
})

output$Run <- renderPlotly({
 pdf(NULL)
 ggplotly(ggplot(d(), aes(x = as.POSIXlt(time) , y = mile)) +
   geom_point() +
   theme_bw() +
   xlab('Time') +
   ylab('mile'))
})

ui.R

library(shinydashboard)
library(shiny)
library(shinyjs)
library(plotly)

ui <- dashboardPage(

  dashboardHeader(title = "Analytics DashBoard")
  ,skin = 'green'
    ,dashboardSidebar(
      tags$head(
      tags$style(HTML("
                      .sidebar { height: 90vh; overflow-y: auto; }
                      " )
      )
    ),
#       sidebarSearchForm(label = "Search...", "searchText", "searchButton"),
      sidebarMenu(


        , menuItem("Real Time Graphs", tabName = "RealTimeG", icon = icon("cog"))


      )

    )


   ,dashboardBody(
     tabItems(
     ,tabItem(
        tabName = "RealTimeG"


       ,fluidRow(
         box(
         title = "total Run Time"
         ,plotlyOutput("Run")
         , width = 6
         )
       )
   )
))

What is issue ? and How to solve it ?

like image 907
Kush Patel Avatar asked Oct 15 '25 04:10

Kush Patel


1 Answers

I had the same problem. I solved it by using dev.off() in renderPlotly function. try doing something like this:

utput$Run <- renderPlotly({
 pdf(NULL)
 g<-ggplotly(ggplot(d(), aes(x = as.POSIXlt(time) , y = mile)) +
 geom_point() +
 theme_bw() +
 xlab('Time') +
 ylab('mile'))
 dev.off()
 g
 })

Looks like shiny creates/opens (not sure) new graphics device every time the plot is refreshed. Yo can check this by printing dev.list() in your shiny app. You will get something like this after few refresh:

RStudioGD       png       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf 
        2         3         4         5         6         7         8         9        10        11 
  pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf 
   12        13        14        15        16        17        18        19        20        21 
  pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf 
   22        23        24        25        26        27        28        29        30        31 
  pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf       pdf 
   32        33        34        35        36        37        38        39        40        41 
  pdf       pdf       pdf       pdf       pdf 
   42        43        44        45        46 
like image 54
Maju116 Avatar answered Oct 17 '25 17:10

Maju116



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!