changing the height of plot area in "plotOutput" in shiny based on the number of the figures(automatically)

I have a " renderplot " function in the server section of Shiny that produces 1 to 4 figures.
how can I change the height of the plot area in the shiny app based on the number of the figures (automatically)?
I mean the height for 4 figures should be bigger than the height for 2 figures.
I used wight = "auto" , height = "auto" in the UI section but I got error. So I assign a fix size to it (height = "800"), but if I have 1 figure it would be very big. if I have 3 or 4 they get smaller.
please see a part of my code:

#UI section
plotOutput("fancyPlot",  inline = F, height = "800")

#Server section
 output$fancyPlot <- renderPlot({
#I get the plot_list_final which has some plots (1 or 2 or 3 or 4).
              n <-  lenght(plot_list_final )
              nCol <- floor(sqrt(n))
              p_last =  do.call("grid.arrange", c(plot_list_final, ncol=nCol))
              return(p_last) 
})

You can pass a function to the heigth argument of the renderPlot() function so you can define any logic inside based on the length of your plot_list, for example:

output$fancyPlot <- renderPlot({
    #I get the plot_list_final which has some plots (1 or 2 or 3 or 4).
    n <-  length(plot_list_final)
    nCol <- floor(sqrt(n))
    p_last =  do.call("grid.arrange", c(plot_list_final, ncol=nCol))
    return(p_last) 
}, height = function() {
    if_else(length(plot_list_final) == 1,
            400,
            800)
})

Thank you for your answer, but where should I add it? I added it exactly after (return(p_last)) but I got erorr.

I believe your typographical error length / lenght was copied by andresc and would likely explain any error.

Does your error mention lenght ?

this is the code that I replaced, the problem is not related to "length"
I removed the " , " because I got an error.

output$fancyPlot <- renderPlot({
    #I get the plot_list_final which has some plots (1 or 2 or 3 or 4).
    n <-  lenght(plot_list_final )
    nCol <- floor(sqrt(n))
    p_last =  do.call("grid.arrange", c(plot_list_final, ncol=nCol))
    return(p_last) 
}
height = function() {
    if_else(length(plot_list_final) == 1,
            400,
            800)}
})

[/quote]

}
height = 

looks like you missed the comma but not just that, the arrangement of the open and closing round and curly brackets. best try

output$fancyPlot <- renderPlot({
  #I get the plot_list_final which has some plots (1 or 2 or 3 or 4).
  n <-  lenght(plot_list_final )
  nCol <- floor(sqrt(n))
  p_last =  do.call("grid.arrange", c(plot_list_final, ncol=nCol))
  return(p_last) 
},
height = function() {
  if_else(length(plot_list_final) == 1,
          400,
          800)}
)

I advise you not to hold back potentially useful information i.e. the content of your error

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.