简体   繁体   中英

Stack Bar Plot For R Shiny Dashboard

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.

this is my dataset

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM