Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert ggplot object to plotly in shiny application

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()
})
like image 482
athlonshi Avatar asked Jun 06 '16 17:06

athlonshi


People also ask

How do I change to plotly in ggplot2?

First of all, create a data frame. Then, create a ggplot2 graph and save it in an object. After that, load plotly package and create the ggplot2 graph using ggplotly function.

What is the difference between ggplot2 and plotly?

Aesthetically, many users consider ggplot2 to be better looking than Plotly, due to its margins and points. In terms of speed, ggplot2 tends to run much slower than Plotly. With regard to integration, both Plotly and ggplot2 can integrate with a variety of tools, like Python, MATLAB, Jupyter, and React.

What is Ggplotly?

With ggplotly() by Plotly, you can convert your ggplot2 figures into interactive ones powered by plotly. js, ready for embedding into Dash applications. ggplotly is free and open source and you can view the source, report issues or contribute on GitHub. Head over to the community forum to ask questions and get help.

What package is Ggplotly?

Plotly is an R package for creating interactive web-based graphs via plotly's JavaScript graphing library, plotly.


2 Answers

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)
like image 79
Bryan Goggin Avatar answered Sep 22 '22 00:09

Bryan Goggin


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.

like image 30
TrivialSpace Avatar answered Sep 20 '22 00:09

TrivialSpace