Tělo

Tvorba dashboardů pomocí shinydashboard

Png Kee Seng

Researcher

Přehled

  • Hlavní část uživatelského rozhraní shinydashboard
  • Typicky zde jsou umístěny vstupy a výstupy
    • Jsou jako jídla a objednávky v restauraci
    • Server zajišťuje komunikaci
  • Tělo je definováno pomocí dashboardBody() a konvenčně uloženo jako body
body <- dashboardBody(...)
Tvorba dashboardů pomocí shinydashboard

Drátěné modelování

  • Provádějte drátěné modely (wireframing)
    • Nejprve nastavte strukturu, pak přidejte obsah
  • V shinydashboard nejprve určete rozmístění objektů

Drátěný model vzducholodě.

1 Brett Jordan, Flickr
Tvorba dashboardů pomocí shinydashboard

Přidávání řádků a boxů: prázdné boxy

  • Přidejte řádky pomocí fluidRow()
  • A přidejte boxy pomocí box()

Dashboard se dvěma řádky, každý se dvěma prázdnými boxy.

body <- dashboardBody(

fluidRow(
box("Row 1, box 1"), box("Row 1, box 2")
), fluidRow(
box("Row 2, box 1"), box("Row 2, box 2")
)
)
Tvorba dashboardů pomocí shinydashboard

Přidávání řádků a boxů: obsah boxů

Tělo se čtyřmi boxy, některé obsahují obsah.

body <- dashboardBody(
  fluidRow(box("Row 1, box 1", 

plotOutput('plot')),
box("Row 1, box 2")), fluidRow(box("Row 2, box 1"), box("Row 2, box 2",
selectInput("select", "Select team number:", choices = c(1,2))))
)
Tvorba dashboardů pomocí shinydashboard

Zabránění přetečení boxů

  • Každý box zabírá ve výchozím nastavení 6 z 12 jednotek celkové šířky
  • Aby nedocházelo k přetečení, nastavte width
    • V našem příkladu nastavte šířky na 3, 5 a 4
  • Přidávání box() se důrazně doporučuje

Více boxů v těle

body <- dashboardBody(
  fluidRow(box("Row 1, box 1"), 
           box("Row 1, box 2"),
           box("Row 1, box 3")),
  fluidRow(box("Row 2, box 1"), 
           box("Row 2, box 2"))
)
body <- dashboardBody(
  fluidRow(box("Row 1, box 1", width = 3), 
           box("Row 1, box 2", width = 5),
           box("Row 1, box 3", width = 4)),
  fluidRow(box("Row 2, box 1"), 
           box("Row 2, box 2"))
)
Tvorba dashboardů pomocí shinydashboard

valueBox a infoBox

  • Existují také boxy zobrazující malé množství informací
    • valueBox()
    • infoBox()

valueBox a infoBox v těle.

body <- dashboardBody(
  fluidRow(valueBox(value = 3, 
                    subtitle = "Total no. of red cards awarded", 
                    icon = icon("user"),
                    color = "red"),

infoBox(value = 158, title = "Total no. of goals scored", icon = icon("futbol")) ))
Tvorba dashboardů pomocí shinydashboard

valueBoxOutput a infoBoxOutput

  • Varianty valueBox() a infoBox(): valueBoxOutput() a infoBoxOutput()
  • Jedná se o výstupní funkce
  • Existují také renderValueBox() a renderInfoBox()
  • valueBox() a infoBox() jsou nezbytné

valueBoxOutput a infoBoxOutput v těle. Vykreslený shinydashboard je identický s předchozím.

body <- dashboardBody(
  fluidRow(valueBoxOutput(outputId = "valuebox1"),
           infoBoxOutput(outputId = "infobox1")
           ))
server <- function(input, output){
  output$valuebox1 <- renderValueBox(
    valueBox(3, "Total no. of red cards awarded",
                icon = icon("user"), color = "red"))
  output$infobox1 <- renderInfoBox(
    infoBox(158, 
                   title = "Total no. of goals scored", 
                   icon = icon("futbol")))
}
Tvorba dashboardů pomocí shinydashboard

Analogie mezi valueBoxOutput a plotOutput

  • plotOutput():
    • Umísťuje se do UI
    • Určuje polohu v rámci shinydashboard
  • renderPlot():
    • Umísťuje se do server()
    • Obsahuje objekt ggplot()
  • valueBoxOutput():
    • Umísťuje se do UI
    • Určuje polohu v rámci shinydashboard
  • renderValueBox():
    • Umísťuje se do server()
    • Obsahuje objekt valueBox()
Tvorba dashboardů pomocí shinydashboard

Propojení postranního panelu a těla

  • Vzpomeňte si na postranní panel se dvěma tlačítky „charts" a „statistics"
  • Pro propojení s tělem je nutné přidat tabItems()
    • Každá stránka je definována pomocí tabItem()
    • Štítky každého páru menuItem()-tabItem() se musí shodovat

Tělo a postranní panel jsou nyní propojeny

sidebar <- dashboardSidebar(
  sidebarMenu(
    id = "pages",

menuItem("Many charts", tabName = "charts", icon = icon("chart-line"), badgeLabel = "New content!", badgeColor = "green"),
menuItem("Statistics", icon = icon("file-excel"), tabName = "statistics", badgeLabel = "urgent", badgeColor = "red") ))
body <- dashboardBody( tabItems(
tabItem("charts", "Charts go here." ), tabItem("statistics", "Statistics go here." )))
Tvorba dashboardů pomocí shinydashboard

Záložky v těle

  • V aplikaci shinyApp lze sadu záložek definovat pomocí tabsetPanel()
    • Každá záložka je definována pomocí tabPanel()
  • Nezaměňujte s tabItems() a tabItem()

Přidávání záložek v těle

body <- dashboardBody(tabsetPanel(

tabPanel("Distributions", box(plotOutput("dist"))), tabPanel("Statistics", dateInput("matchdate", "Enter the match date:", value = "2022-11-20"), valueBoxOutput("red"), valueBoxOutput("yellow")), tabPanel("Data", "Data goes here.", tableOutput("data"))
))
server <- function(input, output){ output$red <- renderValueBox(valueBox(0, "Red cards")) output$yellow <- renderValueBox(valueBox(6, "Yellow cards")) }
Tvorba dashboardů pomocí shinydashboard

Pojďme si procvičit!

Tvorba dashboardů pomocí shinydashboard

Preparing Video For Download...