Aan de slagBegin gratis

UFO-waarnemingen: tabindeling

Zoals het nu is, is de app wat druk, met de grafiek boven de tabel. Aangezien dit een dashboard is, is het beter om de twee Resultaten te scheiden.

De laatste stap in het bouwen van je dashboard is om de plotOutput() en tableOutput() die je hebt gemaakt te nemen en de tabindeling toe te voegen.

Deze oefening maakt deel uit van de cursus

Webapplicaties bouwen met Shiny in R

Bekijk cursus

Oefeninstructies

  • Voeg de tabbladindeling en de twee tabs toe. De eerste moet de plot bevatten en de tweede de tabel. Geef ze gerust namen die voor jou logisch zijn!

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

ui <- fluidPage(
  titlePanel("UFO Sightings"),
  sidebarPanel(
    selectInput("state", "Choose a U.S. state:", choices = unique(usa_ufo_sightings$state)),
    dateRangeInput("dates", "Choose a date range:",
      start = "1920-01-01",
      end = "1950-01-01"
    )
  ),
  # MODIFY CODE BELOW: Create a tab layout for the dashboard
  mainPanel(
    plotOutput("shapes"),
    tableOutput("duration_table")
  )
)

server <- function(input, output) {
  output$shapes <- renderPlot({
    usa_ufo_sightings %>%
      filter(
        state == input$state,
        date_sighted >= input$dates[1],
        date_sighted <= input$dates[2]
      ) %>%
      ggplot(aes(shape)) +
      geom_bar() +
      labs(
        x = "Shape",
        y = "# Sighted"
      )
  })

  output$duration_table <- renderTable({
    usa_ufo_sightings %>%
      filter(
        state == input$state,
        date_sighted >= input$dates[1],
        date_sighted <= input$dates[2]
      ) %>%
      group_by(shape) %>%
      summarize(
        nb_sighted = n(),
        avg_duration_min = mean(duration_sec) / 60,
        median_duration_min = median(duration_sec) / 60,
        min_duration_min = min(duration_sec) / 60,
        max_duration_min = max(duration_sec) / 60
      )
  })
}

shinyApp(ui, server)
Code bewerken en uitvoeren