31

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()
})
1
  • use renderPlotly instead Commented Jun 6, 2016 at 18:00

2 Answers 2

41

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)
Sign up to request clarification or add additional context in comments.

6 Comments

Sorry about that. give it another try.
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.
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?
Same problem here. it is going to the Rstudio's plot instead of browser. useless
Same here, following @TrivialSpace's tip
|
26

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.

2 Comments

Doesn't make a difference
Thanks! exactly what i was missing. This is in the example above but skimmed over it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.