Вы можете использовать пакет ggplot2
для создания барплота в стеке с geom_bar(stat = "identity")
.Однако для преобразования формата широкий data.frame
в узкий , необходимый для ggplot2
, необходимо использовать функцию melt
пакета reshape2
.
Пожалуйстасм. приведенный ниже код для диаграммы в среде Shiny Dashboard:
# 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)
Выход: