# R packages
library(shiny)
library(dplyr)
theme_set(theme_minimal())
# data preps
data(storms)
<- storms |>
stormNames select(name, year, status) |>
distinct() |>
group_by(name, status) |>
summarize(count = n()) |>
arrange(desc(count))
unique(stormNames$status)
# ui
<- fluidPage(
ui
"The plot below shows the distribution of storm name use.",
# 1. nameDist
plotOutput("nameDist")
)
<- function(input, output, session) {
server
# 1. nameDist
$nameDist <- renderPlot({
output
ggplot(data = stormNames) +
geom_histogram(aes(x = count))
})
}
shinyApp(ui, server)
Shiny Exercise 4
Create and Use Input
Goal: Enable filtering by storm status.
Click to Check the Complete Shiny App Code!
# R packages
library(shiny)
library(tidyverse)
theme_set(theme_minimal())
# data preps
data(storms)
<- storms |>
stormNames select(name, year, status) |>
distinct() |>
group_by(name, status) |>
summarize(count = n()) |>
arrange(desc(count))
# ui
<- fluidPage(
ui
# 1. stormStatus
selectInput("stormStatus",
label = "Filter by storm type: ",
choices = unique(stormNames$status)),
"The plot below shows the distribution of storm name use.",
# 2. nameDist
plotOutput("nameDist")
)
<- function(input, output, session) {
server
# 2. nameDist
$nameDist <- renderPlot({
output
str(input$stormStatus) # 1. stormStatus
ggplot(data =
|>
stormNames filter(status == input$stormStatus)) + # 1. stormStatus
geom_histogram(aes(x = count),
bins = 5) +
xlab(input$stormStatus) # 1. stormStatus
},
width = 400, height = 300)
}
shinyApp(ui, server)