Votre premier shinydashboard

Créer des tableaux de bord avec shinydashboard

Png Kee Seng

Researcher

Le parcours jusqu'ici

  • Maquette de l'interface utilisateur (UI)
    • En-tête, barre latérale, corps
  • Définir les sorties et leurs interactions avec les entrées utilisateur
  • Le server jouera ce rôle

dessin

header <- dashboardHeader(...)
sidebar <- dashboardSidebar(...)
body <- dashboardBody(...)

ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { ... }
shinyApp(ui, server)
Créer des tableaux de bord avec shinydashboard

Le serveur

  • Besoin de définir sorties et entrées
  • Préciser les sorties et leur interaction avec les entrées
  • Utile de définir des fonctions utilitaires pour alléger et clarifier le code
    • Placez ces fonctions en haut du script

Le serveur est comme un serveur de restaurant serviable qui transmet vos instructions à la cuisine. Dans une shinyApp, le serveur indique à R comment les entrées interagissent avec les sorties.

Créer des tableaux de bord avec shinydashboard

Ajouter un graphique

  • Retour au tableau de bord du tournoi de football
  • Ajoutons un graphique hexbin pour l'équipe 1
  • Il faut ensuite placer ce graphique dans le serveur
  • Et si l'on veut le même pour l'équipe 2 ?
soccer %>%
  ggplot(aes(x=`1_passes_compeletd`, 
             y=`1_goal_prevented`)) +
  geom_hex(bins=10) + theme_classic()
server <- function(input, output){
  output$plot1 <- renderPlot({
  fifa %>%
    ggplot(aes(x=`1_passes_compeletd`, 
               y=`1_goal_prevented`)) +
    geom_hex(bins=10) + theme_classic()
  })
}
Créer des tableaux de bord avec shinydashboard

Définir des objets ggplot dans le serveur

server <- function(input, output) {
  output$plot1 <- renderPlot({
    if (input$team == 1){

fifa %>% ggplot(aes(x=`1_passes_compeletd`, y=`1_goal_prevented`)) + geom_hex(bins=10) + theme_classic()
} else if (input$team == 2){
fifa %>% ggplot(aes(x=`2_passes_compeletd`, y=`2_goal_prevented`)) + geom_hex(bins=10) + theme_classic()
} }) }
Créer des tableaux de bord avec shinydashboard

Utiliser des fonctions utilitaires

plot_hex <- function(team){
  if (team == 1){
    soccer %>% ggplot(aes(x=`1_passes_compeletd`, 
                        y=`1_goal_prevented`)) +
      geom_hex(bins=10) + theme_classic()
  }
  else if (team == 2){
    soccer %>% ggplot(aes(x=`2_passes_compeletd`, 
                        y=`2_goal_prevented`)) +
      geom_hex(bins=10) + theme_classic()
  }
}
Créer des tableaux de bord avec shinydashboard

Utiliser des fonctions utilitaires

Avec fonction utilitaire

server <- function(input, output) {
  output$plot1 <- renderPlot(plot_hex(input$team)) 
}
  • N'est-ce pas plus lisible ?

Sans fonction utilitaire

server <- function(input, output) {
  output$plot1 <- renderPlot({
    if (input$team == 1){
      soccer %>% ggplot(aes(x=`1_passes_compeletd`, 
              y=`1_goal_prevented`)) +
        geom_hex(bins=10) + theme_classic()
      }
    else if (input$team == 2){
      soccer %>% ggplot(aes(x=`2_passes_compeletd`, 
              y=`2_goal_prevented`)) +
        geom_hex(bins=10) + theme_classic()
      }
    })
}
Créer des tableaux de bord avec shinydashboard

Assembler le tout

# Un shinydashboard complet

header <- dashboardHeader(title = "Soccer tournament")
sidebar <- dashboardSidebar(sidebarMenu(menuItem("Passes/goals", tabName = "passtab"), menuItem("Empty", tabName = "emptytab")))
body <- dashboardBody(tabItems( tabItem("passtab", fluidRow(box(selectInput("team", "Team number", choices = c(1,2))), box(plotOutput("plot1"))) ), tabItem("emptytab")) )
ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { output$plot1 <- renderPlot(plot_hex(input$team)) }
shinyApp(ui, server)
Créer des tableaux de bord avec shinydashboard

Une animation montre le rendu du shinydashboard. L'utilisateur peut passer d'une page ou d'un onglet à l'autre et fournir des entrées pour obtenir différents résultats.

Créer des tableaux de bord avec shinydashboard

Passons à la pratique !

Créer des tableaux de bord avec shinydashboard

Preparing Video For Download...