How can I make a stack barchart for my Shiny Dashboard? For example I want one bar for 2016 with number of applications, number of accepted applications and the number enrolled, but all of these values together in one column - stacked.
You can use ggplot2
package to create stacked barplot with geom_bar(stat = "identity")
. However to convert wide data.frame
format into narrow one required by ggplot2
it is neccessary to use melt
function of reshape2
package.
Please see the code below for barchart in Shiny Dashboard environement:
# load the required packages
library(shiny)
require(shinydashboard)
library(ggplot2)
library(dplyr)
df <- read.table(text = "
Enrolment Applications Accepted Students Enrolled
3 2017 30 25 5 20
2 2016 24 21 3 20
1 2015 22 20 2 17")
#Dashboard header carrying the title of the dashboard
header <- dashboardHeader(title = "Basic Dashboard")
#Sidebar content of the dashboard
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
)
)
frow2 <- fluidRow(
box(
title = "Enrollement"
,status = "primary"
,solidHeader = TRUE
,collapsible = TRUE
,plotOutput("enrollement", height = "300px")
)
)
# combine the two fluid rows to make the body
body <- dashboardBody(frow2)
#completing the ui part with dashboardPage
ui <- dashboardPage(title = 'This is my Page title', header, sidebar, body, skin='red')
# create the server functions for the dashboard
server <- function(input, output) {
#creating the plotOutput content
output$enrollement <- renderPlot({
df$Enrolment <- factor(df$Enrolment)
df$Not_Accepted <- df$Applications - df$Accepted
df$Not_Enrolled <- df$Accepted - df$Enrolled
df2 <- melt(df[, c("Enrolment", "Enrolled", "Not_Enrolled", "Not_Accepted")])
ggplot(df2, aes(Enrolment, y = value, fill = variable)) +
geom_bar(stat = "identity")
})
}
shinyApp(ui, server)
Output:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.