I am creating a Shiny app with a plotly scatterplot. I am trying to keep the scatterplot square-shaped, but want a much larger size than its default. In the simple MWE below, fo
It seems that the plotlyOutput function does not hand over the height/width parameters. As mentioned before, you can force to plot to be of a certain size:
p <- plot_ly(x = x, y = y, height=800)
However, if you have following elements on the site (e.g. another plot like in my case) the plot is partially hidden. I found a workaround by manipulating the plotlyOutput object on the server-side. Here is a simple example:
Server:
output$plotly <- renderUI({
plot_output_list <- lapply(1:3, function(i) {
plotname <- paste0("plotly", i)
plot_output_object <- plotlyOutput(plotname)
plot_output_object <- renderPlotly({
p <- plot_ly(x = a, y = b)
return(p) # only necessary when adding other plotly commands like add_trace
})
})
# for each element set the height (here went something wrong with plotlyOutput)
for(i in 1:length(plot_output_list)){
attr(plot_output_list[[i]],'outputArgs') <- list(height="850px")
}
# return
return(plot_output_list)
})
UI:
uiOutput("plotly")
I anyway had to go the way via renderUI since I have a dynamic number of plots. Hope this helps you too
When you use ggplotly()
you can change the size of plotlyOutput
with layout options in the server part:
p2 <- ggplotly(p) %>% layout(height = 800, width = 800)
I found that plotlyOutput
will only work with parameters width = "600px", height = "600px"
if you provide input directly from plot_ly()
instead ggplotly()
, e.g.
p2 <- plot_ly(dat, x = ~x, y = ~y)