27

I am trying to convert a ggplot object to plotly and show it in a shiny application. But I encountered an error "no applicable method for 'plotly_build' applied to an object of class "NULL""

I was able to return the ggplot object to the shiny application successfully,

output$plot1 <- renderplot({
   gp <- ggplot(data = mtcars, aes(x = disp, y = cyl)) + geom_smooth(method = lm, formula = y~x) + geom_point() + theme_gdocs()
})

but somehow plotly cannot convert it.

My code looks like this

output$plot2 <- renderplotly({
   gp <- ggplot(data = mtcars, aes(x = disp, y = cyl)) + geom_smooth(method = lm, formula = y~x) + geom_point() + theme_gdocs()
   ggplotly()
})
athlonshi
  • 1,711
  • 1
  • 19
  • 23

2 Answers2

37

Try:

library(shiny)
library(ggplot2)
library(ggthemes)
library(plotly)

ui <- fluidPage(  
titlePanel("Plotly"),
sidebarLayout(
sidebarPanel(),
mainPanel(
  plotlyOutput("plot2"))))
  
server <- function(input, output) {

output$plot2 <- renderPlotly({
  ggplotly(
    ggplot(data = mtcars, aes(x = disp, y = cyl)) + 
      geom_smooth(method = lm, formula = y~x) + 
      geom_point() + 
      theme_gdocs())
})
}

shinyApp(ui, server)
Bryan Goggin
  • 2,449
  • 15
  • 17
  • 1
    Sorry about that. give it another try. – Bryan Goggin Jun 06 '16 at 18:50
  • 1
    It is working now. Actually both ggplotly or print(ggplotly()) work fine. I noticed that I need to restart shiny server in order to make the change (from ggplot to plotly) take effect. I don't know whether this is normal or not but it did cause some inconsistent observation when runing shiny in Rstudio vs on web server. – athlonshi Jun 07 '16 at 15:36
  • 3
    I had to restart the server as well, yes. However, my plot output is not going to the application in the browser, but is instead rendering in the Rstudio's Viewer tab...any ideas? – d8aninja Mar 08 '17 at 17:13
  • 2
    Same problem here. it is going to the Rstudio's plot instead of browser. useless – Vipin Verma Apr 20 '17 at 07:15
  • 1
    Same here, following @TrivialSpace's tip – dbo Dec 17 '18 at 07:27
  • 1
    The answer pasted into my Rstudio (lastest version) does not work – invictus Mar 19 '20 at 19:50
24

If it is rendering in the RStudio pane instead of the app, do make sure that you are using plotlyOutput in the UI section as well as renderPlotly in the server section.

qwr
  • 9,525
  • 5
  • 58
  • 102
TrivialSpace
  • 249
  • 2
  • 2