3 votes

Shiny plotlyOutput() ne répond pas aux tailles de hauteur et de largeur

Je suis en train de créer une application Shiny avec un nuage de points plotly. J'essaie de conserver la forme carrée du nuage de points, mais je veux une taille beaucoup plus grande que celle par défaut. Dans le MWE simple ci-dessous, par exemple, je fixe les paramètres de largeur et de hauteur à 1400px. Cependant, même lorsque je modifie ces valeurs (par exemple à 800px), la taille du nuage de points ne semble pas changer.

library(plotly)
library(shiny)
library(ggplot2)

set.seed(1)
dat <- data.frame(ID = paste0("ID", 1:100), x = rnorm(100), y = rnorm(100), stringsAsFactors = FALSE)

ui <- shinyUI(fluidPage(
  titlePanel("title panel"),
  sidebarLayout(position = "left",
  sidebarPanel(width=3,
    actionButton("goButton", "Action")
   ),
  mainPanel(width=9, 
    plotlyOutput("scatMatPlot", width = "1400px", height = "1400px")
  )
  )
))

server <- shinyServer(function(input, output, session) {
  p <- ggplot(data= dat, aes(x=x, y=y)) + geom_point() + coord_cartesian(xlim = c(-5, 5), ylim = c(-5, 5)) + coord_equal(ratio = 1) 
  p2 <- ggplotly(p)
  output$scatMatPlot <- renderPlotly({p2})
})

shinyApp(ui, server)

J'ai essayé d'autres valeurs de taille que "1400px". Par exemple, j'ai essayé "auto" et "100%" - mais cela ne semble pas faire de différence non plus. Comment puis-je modifier la taille du nuage de points dans ce MWE ? Merci de votre contribution.

4voto

DianaLog Points 151

Lorsque vous utilisez ggplotly() vous pouvez modifier la taille des plotlyOutput avec des options de mise en page dans la partie serveur :

p2 <- ggplotly(p) %>% layout(height = 800, width = 800)

J'ai trouvé que plotlyOutput ne fonctionnera qu'avec les paramètres width = "600px", height = "600px" si vous fournissez des données directement à partir de plot_ly() au lieu de ggplotly() par exemple

p2 <- plot_ly(dat, x = ~x, y = ~y)

1voto

Alexander Leow Points 356

Il semble que la fonction plotlyOutput ne transmette pas les paramètres de hauteur/largeur. Comme mentionné précédemment, vous pouvez forcer le tracé à être d'une certaine taille :

p <- plot_ly(x = x, y = y, height=800) 

Cependant, si vous avez des éléments suivants sur le site (par exemple une autre parcelle comme dans mon cas) la parcelle est partiellement cachée. J'ai trouvé une solution de contournement en manipulant l'objet plotlyOutput du côté du serveur. Voici un exemple simple :

Serveur :

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")

De toute façon, j'ai dû passer par le biais de renderUI puisque j'ai un nombre dynamique de parcelles. J'espère que cela vous aidera aussi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X