Le corps

Créer des tableaux de bord avec shinydashboard

Png Kee Seng

Researcher

Aperçu

  • L'essentiel de l'interface shinydashboard
  • On y place généralement les entrées et les sorties
    • Comme les plats et les commandes dans un resto
    • Le serveur assure la communication
  • Défini par dashboardBody(), souvent stocké dans body
body <- dashboardBody(...)
Créer des tableaux de bord avec shinydashboard

Schéma fil de fer

  • Faire un schéma fil de fer
    • Poser la structure avant d'ajouter le contenu
  • Dans un shinydashboard, d'abord fixer l'emplacement des objets

Le schéma fil de fer d'un zeppelin.

1 Brett Jordan, Flickr
Créer des tableaux de bord avec shinydashboard

Ajouter des rangées et des boîtes : boîtes vides

  • Ajouter des rangées avec fluidRow()
  • Puis des boîtes avec box()

Tableau de bord avec deux rangées, chacune avec deux boîtes vides.

body <- dashboardBody(

fluidRow(
box("Row 1, box 1"), box("Row 1, box 2")
), fluidRow(
box("Row 2, box 1"), box("Row 2, box 2")
)
)
Créer des tableaux de bord avec shinydashboard

Ajouter des rangées et des boîtes : contenu dans les boîtes

Corps avec quatre boîtes et du contenu dans certaines.

body <- dashboardBody(
  fluidRow(box("Row 1, box 1", 

plotOutput('plot')),
box("Row 1, box 2")), fluidRow(box("Row 2, box 1"), box("Row 2, box 2",
selectInput("select", "Select team number:", choices = c(1,2))))
)
Créer des tableaux de bord avec shinydashboard

Éviter les boîtes qui débordent

  • Par défaut, chaque boîte occupe 6 des 12 unités de largeur
  • Pour éviter le débordement, définir width
    • Ici : largeurs 3, 5 et 4
  • Multiplier les box() est fortement recommandé

Plus de boîtes dans le corps

body <- dashboardBody(
  fluidRow(box("Row 1, box 1"), 
           box("Row 1, box 2"),
           box("Row 1, box 3")),
  fluidRow(box("Row 2, box 1"), 
           box("Row 2, box 2"))
)
body <- dashboardBody(
  fluidRow(box("Row 1, box 1", width = 3), 
           box("Row 1, box 2", width = 5),
           box("Row 1, box 3", width = 4)),
  fluidRow(box("Row 2, box 1"), 
           box("Row 2, box 2"))
)
Créer des tableaux de bord avec shinydashboard

valueBox et infoBox

  • Il existe aussi des boîtes pour de petites infos
    • valueBox()
    • infoBox()

valueBox et infoBox dans le corps.

body <- dashboardBody(
  fluidRow(valueBox(value = 3, 
                    subtitle = "Nbr total de cartons rouges", 
                    icon = icon("user"),
                    color = "red"),

infoBox(value = 158, title = "Nbr total de buts marqués", icon = icon("futbol")) ))
Créer des tableaux de bord avec shinydashboard

valueBoxOutput et infoBoxOutput

  • Variantes de valueBox() et infoBox : valueBoxOutput() et infoBoxOutput()
  • Ce sont des fonctions de sortie
  • Il existe aussi renderValueBox() et renderInfoBox()
  • valueBox() et infoBox() restent nécessaires

valueBoxOutput et infoBoxOutput dans le corps. Le rendu est identique au précédent.

body <- dashboardBody(
  fluidRow(valueBoxOutput(outputId = "valuebox1"),
           infoBoxOutput(outputId = "infobox1")
           ))
server <- function(input, output){
  output$valuebox1 <- renderValueBox(
    valueBox(3, "Nbr total de cartons rouges",
                icon = icon("user"), color = "red"))
  output$infobox1 <- renderInfoBox(
    infoBox(158, 
                   title = "Nbr total de buts marqués", 
                   icon = icon("futbol")))
}
Créer des tableaux de bord avec shinydashboard

Analogie : valueBoxOutput et plotOutput

  • plotOutput() :
    • Placé dans l'UI
    • Détermine sa position dans le shinydashboard
  • renderPlot() :
    • Placé dans server()
    • Contient un objet ggplot()
  • valueBoxOutput() :
    • Placé dans l'UI
    • Détermine sa position dans le shinydashboard
  • renderValueBox() :
    • Placé dans server()
    • Contient un objet valueBox()
Créer des tableaux de bord avec shinydashboard

Lier le panneau latéral et le corps

  • Rappelez-vous le panneau latéral avec deux boutons « charts » et « statistics »
  • Pour les lier au corps, il faut ajouter tabItems()
    • Chaque page est définie par un tabItem()
    • Les étiquettes de chaque paire menuItem()-tabItem() doivent correspondre

Le corps et le panneau latéral sont maintenant liés

sidebar <- dashboardSidebar(
  sidebarMenu(
    id = "pages",

menuItem("Many charts", tabName = "charts", icon = icon("chart-line"), badgeLabel = "New content!", badgeColor = "green"),
menuItem("Statistics", icon = icon("file-excel"), tabName = "statistics", badgeLabel = "urgent", badgeColor = "red") ))
body <- dashboardBody( tabItems(
tabItem("charts", "Charts go here." ), tabItem("statistics", "Statistics go here." )))
Créer des tableaux de bord avec shinydashboard

Onglets dans le corps

  • Dans une shinyApp, on peut aussi définir des onglets avec tabsetPanel()
    • Chaque onglet est défini par tabPanel()
  • À ne pas confondre avec tabItems() et tabItem()

Ajout d'ensembles d'onglets dans le corps

body <- dashboardBody(tabsetPanel(

tabPanel("Distributions", box(plotOutput("dist"))), tabPanel("Statistics", dateInput("matchdate", "Entrer la date du match :", value = "2022-11-20"), valueBoxOutput("red"), valueBoxOutput("yellow")), tabPanel("Data", "Data goes here.", tableOutput("data"))
))
server <- function(input, output){ output$red <- renderValueBox(valueBox(0, "Cartons rouges")) output$yellow <- renderValueBox(valueBox(6, "Cartons jaunes")) }
Créer des tableaux de bord avec shinydashboard

Passons à la pratique !

Créer des tableaux de bord avec shinydashboard

Preparing Video For Download...