Im trying to download the following waterfall chart created inside a shiny dashboard as a pdf but when I use the shinydashboard
interface I download an empty pdf.
library(shiny)
library(plotly)
library(shinydashboard)
library(shinydashboardPlus)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
downloadButton('downloadPlot', 'Download Plot')
),
dashboardBody(plotlyOutput('pl'))
)
server <- function(input, output, session) {
plotInput <- function(){
x= list("Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax")
measure= c("relative", "relative", "total", "relative", "relative", "total")
text= c("+60", "+80", "", "-40", "-20", "Total")
y= c(60, 80, 0, -40, -20, 0)
data = data.frame(x=factor(x,levels=x),measure,text,y)
fig <- plot_ly(
data, name = "20", type = "waterfall", measure = ~measure,
x = ~x, textposition = "outside", y= ~y, text =~text,
connector = list(line = list(color= "rgb(63, 63, 63)")))
fig <- fig %>%
layout(title = "Profit and loss statement 2018",
xaxis = list(title = ""),
yaxis = list(title = ""),
autosize = TRUE,
showlegend = TRUE,waterfallgap = "0.8")
fig
}
output$pl<-renderPlotly({
plotInput()
})
output$downloadPlot <- downloadHandler(
filename = "Shinyplot.pdf",
content = function(file) {
pdf(file)
plotInput()
dev.off()
})
}
shinyApp(ui = ui, server = server)
Plotly is not standard R graphics. You can't use dev to capture it. Try this:
output$downloadPlot <- downloadHandler(
filename = "Shinyplot.pdf",
content = function(file) {
plotly::export(plotInput(), file)
})
Use plotly::export
to capture
Note: export
is in the process of being deprecated (use orca
instead). orca
needs to install some extra system dependencies.
Usage is similar: orca(plotInput(), file = file)