Je eerste shinydashboard

Dashboards bouwen met shinydashboard

Png Kee Seng

Researcher

Tot nu toe

  • Wireframing in de user interface (UI)
    • Header, sidebar, body
  • Outputs definiëren en hun interactie met inputs
  • De server vervult deze rol

tekening

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

ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { ... }
shinyApp(ui, server)
Dashboards bouwen met shinydashboard

De server

  • Outputs en inputs definiëren
  • Outputs specificeren en hoe ze met inputs samenwerken
  • Handig: eigen helperfuncties om rommel te verminderen en leesbaarheid te verbeteren
    • Zet deze helperfuncties bovenaan je code

De server is als een behulpzame ober die je instructies doorgeeft aan de keuken. De server in een shinyApp vertelt R hoe inputs met outputs moeten samenwerken.

Dashboards bouwen met shinydashboard

Een plot toevoegen

  • Terug naar het global soccer tournament-dashboard
  • Voeg een hexbin-plot toe voor team 1
  • Zet deze plot daarna in de server
  • En als we dezelfde plot voor team 2 willen?
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()
  })
}
Dashboards bouwen met shinydashboard

ggplot-objecten definiëren in server

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()
} }) }
Dashboards bouwen met shinydashboard

Helperfuncties gebruiken

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()
  }
}
Dashboards bouwen met shinydashboard

Helperfuncties gebruiken

Met helperfunctie

server <- function(input, output) {
  output$plot1 <- renderPlot(plot_hex(input$team)) 
}
  • Is dit niet leesbaarder?

Zonder helperfunctie

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()
      }
    })
}
Dashboards bouwen met shinydashboard

Alles samenbrengen

# Een compleet shinydashboard

header <- dashboardHeader(title = "Soccer tournament")
sidebar <- dashboardSidebar(sidebarMenu(menuItem("Passes/goals", tabName = "passtab"), menuItem("Leeg", tabName = "emptytab")))
body <- dashboardBody(tabItems( tabItem("passtab", fluidRow(box(selectInput("team", "Teamnummer", 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)
Dashboards bouwen met shinydashboard

Een animatie van het uiteindelijke shinydashboard. De gebruiker kan wisselen tussen pagina’s/tabbladen en invoer geven om andere uitvoer te krijgen.

Dashboards bouwen met shinydashboard

Laten we oefenen!

Dashboards bouwen met shinydashboard

Preparing Video For Download...