R Shiny is an excellent tool for interactive data visualizations. However, fitting a large number of graphs onto just one Shiny page may prove to be a challenge. In our experience, virtually all projects with new KPIs being introduced along the way result in inadequate and not readable final reports.
Dashboards provide a solution. They allow the developer to intuitively structure their reports by breaking them down into sections, panels and tabs. This makes it much easier for the final user to navigate through the data.
Semantic Dashboard offers an alternative look of your dashboard based on the Fomantic UI. Historically, we built this package around Semantic UI library, but it got deprecated and now (since December 2019) we base on the well-supported and maintained community fork called Fomantic UI.
It relies and uses components from the mother package shiny.semantic.
Basic dashboard structure is presented below.
library(shiny)
library(semantic.dashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody()
)
server <- shinyServer(function(input, output, session) {
})
shinyApp(ui, server)
Each dashboardPage
consists of three elements: header, sidebar, and body.
Here is one example of how to make header more interesting:
dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE)
Now let's add also a notification on the right:
dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE,
dropdownMenu(type = "notifications",
taskItem("Project progress...", 50.777, color = "red")))
In the sidebar we can define the references to the subpages that will be displayed in the content. For example:
dashboardSidebar(
size = "thin", color = "teal",
sidebarMenu(
menuItem(tabName = "main", "Main"),
menuItem(tabName = "extra", "Extra")
)
)
PRACTICE Try to add icons to the menuItem
.
The content of the app can be defined ike this. Note that we refer to exactly
the same tabName
as in the sidebar.
dashboardBody(
tabItems(
selected = 1,
tabItem(
tabName = "main",
box(h1("main"), title = "A b c", width = 16, color = "orange")
),
tabItem(
tabName = "extra",
h1("extra")
)
)
)
Note that we used box
here with color set to orange. The list of all Fomantic
color you may find here: semantic_palette
.
The effect and complete code for this example is presented below.
library(shiny)
library(semantic.dashboard)
ui <- dashboardPage(
dashboardHeader(color = "blue", title = "Dashboard Demo", inverted = TRUE,
dropdownMenu(type = "notifications",
taskItem("Project progress...", 50.777, color = "red"))),
dashboardSidebar(
size = "thin", color = "teal",
sidebarMenu(
menuItem(tabName = "main", "Main"),
menuItem(tabName = "extra", "Extra")
)
),
dashboardBody(
tabItems(
selected = 1,
tabItem(
tabName = "main",
box(h1("main"), title = "A b c", width = 16, color = "orange")
),
tabItem(
tabName = "extra",
h1("extra")
)
)
)
)
server <- function(input, output, session) {}
shinyApp(ui, server)