Placera olika utdata på olika flikar
Flikar är användbara när du har mycket innehåll och vill dela upp det. För att skapa en flik omsluter du UI-element med funktionen tabPanel() och anger flikens namn med argumentet title.
För att flikarna ska visas i UI:t behöver fliktabellerna grupperas i en "behållare", vilket görs genom att omsluta alla fliktabeller med tabsetPanel().
Din uppgift är att lägga till flikar i Shiny-appen så att inmatningarna och nedladdningsknappen hamnar på en flik, diagrammet på en annan flik och tabellen på en tredje flik. Eftersom det här är en rent visuell förändring görs alla kodändringar enbart i UI-delen.
Den här övningen är en del av kursen
Fallstudier: Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
- Använd funktionen
tabsetPanel()för att skapa en behållare med tre fliktabeller:- En första flik för inmatningarna – ge den namnet "Inputs".
- En andra flik som visar diagrammet – ge den namnet "Plot" (rad 16).
- En tredje flik som visar tabellen – ge den namnet "Table" (rad 21).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
ui <- fluidPage(
h1("Gapminder"),
# Create a container for tab panels
___(
# Create an "Inputs" tab
tabPanel(
title = ___,
sliderInput(inputId = "life", label = "Life expectancy",
min = 0, max = 120,
value = c(30, 50)),
selectInput("continent", "Continent",
choices = c("All", levels(gapminder$continent))),
downloadButton("download_data")
),
# Create a "Plot" tab
___(
title = "Plot",
plotOutput("plot")
),
# Create "Table" tab
___(
title = ___,
DT::dataTableOutput("table")
)
)
)
server <- function(input, output) {
filtered_data <- reactive({
data <- gapminder
data <- subset(
data,
lifeExp >= input$life[1] & lifeExp <= input$life[2]
)
if (input$continent != "All") {
data <- subset(
data,
continent == input$continent
)
}
data
})
output$table <- DT::renderDataTable({
data <- filtered_data()
data
})
output$download_data <- downloadHandler(
filename = "gapminder_data.csv",
content = function(file) {
data <- filtered_data()
write.csv(data, file, row.names = FALSE)
}
)
output$plot <- renderPlot({
data <- filtered_data()
ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point() +
scale_x_log10()
})
}
shinyApp(ui, server)