Bar plot from summary data
# Creating a dataset
Name = c("Bich Phuong", "Dieu Hoa", "Kieu Anh", "Thu Thuy", "Thien Nga", "Ngoc Khanh", "Thu Ngan", "Mai Phuong", "Thi Huyen", "Phuong Thuy", "Thuy Dung", "Ngoc Han", "Thu Thao", "Ky Duyen", "Mỹ Linh")
YoB = c(1971, 1969, 1976, 1976, 1976, 1976, 1980, 1985, 1985, 1988, 1990, 1989, 1991, 1996, 1996)
Height = c(157, 158, 174, 172, 170, 172, 169, 169, 172, 181, 182, 173, 173, 173, 171)
Weight = c(50, NA, NA, NA, NA, 50, 49, 49, 52, 60, 61.5, 55, 49, 49, NA)
hoahau = data.frame(Name, YoB, Height, Weight)
# Simple vertical bar plot
p = ggplot(data=hoahau, aes(x=Name, y=Height, fill=Name))
p = p + geom_bar(stat="identity", width=0.8)
p + theme(legend.position="none", axis.text.x=element_text(angle=90))

# Simple horizontal bar plot
p = ggplot(data=hoahau, aes(x=Name, y=Height, fill=Name))
p = p + geom_bar(stat="identity", width=0.8)
p = p + theme(legend.position="none", axis.text.x=element_text(angle=90))
p + coord_flip() + xlab("")

# Adding value to each bar
p = ggplot(data=hoahau, aes(x=Name, y=Height, fill=Name))
p = p + geom_bar(stat="identity", width=0.8)
p = p + theme(legend.position="none", axis.text.x=element_text(angle=0, color="black"))
p = p + coord_flip() + xlab(" ")
p + geom_text(aes(label=Height), hjust=1, size=3, color="white")

# Bar plot with sorted values
hh = transform(hoahau, Name=reorder(Name, Height))
p = ggplot(data=hh, aes(x=Name, y=Height, fill=Name))
p = p + geom_bar(stat="identity", width=0.8)
p = p + theme(legend.position="none", axis.text.x=element_text(angle=0, color="black"), axis.text.y=element_text(color="black"))
p = p + coord_flip() + xlab(" ")
p + geom_text(aes(label=Height), hjust=1, size=3, color="white")

# Change theme
# require(ggthemes)
p = ggplot(data=hh, aes(x=Name, y=Height, fill=Name))
p = p + geom_bar(stat="identity", width=0.8)
p = p + theme(axis.text.x=element_text(angle=0, color="black"), axis.text.y=element_text(size=15, color="black"))
p = p + coord_flip() + xlab(" ")
p = p + geom_text(aes(label=Height), hjust=1, size=3, color="white")
p + theme_economist() + theme(legend.position="none")

Bar plot from summary data
Age = c(rep("65+", 5), rep("0-14", 5), rep("15-64", 5))
Num = c(4.7, 4.8, 5.8, 6.4, 7.7, 42.6, 38.3, 33.1, 24.5, 23.1, 52.7, 56.9, 61.1, 69.1, 69.2)
Year = c(1979, 1989, 1999, 2009, 2019, 1979, 1989, 1999, 2009, 2019, 1979, 1989, 1999, 2009, 2019)
dat = data.frame(Age, Num, Year)
dat$Age = factor(dat$Age, levels=c("65+", "15-64", "0-14"))
# Plotting data with values using geom_text
p = ggplot(data=dat, aes(x=Year, y=Num, fill=Age, label=Num))
p = p + geom_bar(stat="identity")
p + geom_text(size=3, position=position_stack(vjust=0.5)) + ylab("Percent") + theme(legend.position="top")

# Area plot
p = ggplot(data=dat, aes(x=Year, y=Num))
p = p + geom_area(aes(fill = Age))
p + ylab("Percent") + theme(legend.position="top")

Bar plot for population pyramid
# Reading data
pop = read.csv("~/Dropbox/Science Evaluation/Dan so Vietnam/Dan so VN 1979 - 2019 Long.csv")
pop$Age.group = as.factor(pop$Age.group)
pop$Age.group = factor(pop$Age, levels=unique(pop$Age.group))
pop$Gender = factor(pop$Gender, levels=c("Male", "Female"))
# Plotting population pyramid
p = ggplot(data=pop, aes(x=Age.group, fill=Gender, y=ifelse(test=Gender=="Male", yes=-pop1979, no=pop1979)))
p = p + geom_bar(stat = "identity") + coord_flip()
p + xlab("") + ylab("Population 1979") + theme(legend.position="top")

Bar plot from individual data 1
# Reading data
dat = read.csv("~/Dropbox/VOS Study/Cancer Project/HCMC Cancer Registry Data 1996-2015.csv")
dat$RegID = as.character(dat$RegID)
dat$Year = substr(dat$RegID, start=1, stop=4)
dat$Gender[dat$Sex==1] = "Male"
dat$Gender[dat$Sex==2] = "Female"
# Plotting data with values
p = ggplot(data=dat, aes(x=Year, fill=Gender))
p = p + geom_bar()
p + geom_text(aes(label=..count..), size=2.5, stat="count", position=position_stack(0.5))

# Plotting percentage data
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
##
## combine
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
percentData = dat %>% group_by(Year) %>% count(Gender) %>% mutate(ratio=scales::percent(n/sum(n)))
p = ggplot(data=dat, aes(x=Year, fill=Gender))
p = p + geom_bar(position="fill")
p + geom_text(data=percentData, aes(y=n, label=ratio), size=2.5, position=position_fill(vjust=0.5))

Bar plot from individual data 2
# Exam data 2019
vn = read.csv("~/Dropbox/Bao chi va Khoa hoc/Pho diem 2019/THPT 2019 Quoc gia.csv", header=T)
vn$Language[vn$Code=="N1"] = "English"
vn$Language[vn$Code=="N2"] = "Russian"
vn$Language[vn$Code=="N3"] = "French"
vn$Language[vn$Code=="N4"] = "Chinese"
vn$Language[vn$Code=="N5"] = "German"
vn$Language[vn$Code=="N6"] = "Japanese"
d1 = subset(vn, SoBD < 10000000)
d1$temp = as.character(d1$SoBD)
d1$t = substr(d1$temp, 1, 1)
d1$Province[d1$t=="1"] <- "Ha Noi"
d1$Province[d1$t=="2"] <- "TPHCM"
d1$Province[d1$t=="3"] <- "Hai Phong"
d1$Province[d1$t=="4"] <- "Da Nang"
d1$Province[d1$t=="5"] <- "Ha Giang"
d1$Province[d1$t=="6"] <- "Cao Bang"
d1$Province[d1$t=="7"] <- "Lai Chau"
d1$Province[d1$t=="8"] <- "Tuyen Quang"
d1$Province[d1$t=="9"] <- "Lang Son"
d2 = subset(vn, SoBD > 10000000)
d2$temp = as.character(d2$SoBD)
d2$t = substr(d2$temp, 1, 2)
d2$Province[d2$t=="10"] <- "Lang Son"
d2$Province[d2$t=="11"] <- "Bac Kan"
d2$Province[d2$t=="12"] <- "Thai Nguyen"
d2$Province[d2$t=="13"] <- "Yen Bai"
d2$Province[d2$t=="14"] <- "Son La"
d2$Province[d2$t=="15"] <- "Phu Tho"
d2$Province[d2$t=="16"] <- "Vinh Phuc"
d2$Province[d2$t=="17"] <- "Quang Ninh"
d2$Province[d2$t=="18"] <- "Bac Giang"
d2$Province[d2$t=="19"] <- "Bac Ninh"
d2$Province[d2$t=="21"] <- "Hai Duong"
d2$Province[d2$t=="22"] <- "Hung Yen"
d2$Province[d2$t=="23"] <- "Hoa Binh"
d2$Province[d2$t=="24"] <- "Ha Nam"
d2$Province[d2$t=="25"] <- "Nam Dinh"
d2$Province[d2$t=="26"] <- "Thai Binh"
d2$Province[d2$t=="27"] <- "Ninh Binh"
d2$Province[d2$t=="28"] <- "Thanh Hoa"
d2$Province[d2$t=="29"] <- "Nghe An"
d2$Province[d2$t=="30"] <- "Ha Tinh"
d2$Province[d2$t=="31"] <- "Quang Binh"
d2$Province[d2$t=="32"] <- "Quang Tri"
d2$Province[d2$t=="33"] <- "Hue-TT"
d2$Province[d2$t=="34"] <- "Quang Nam"
d2$Province[d2$t=="35"] <- "Quang Ngai"
d2$Province[d2$t=="36"] <- "Kon Tum"
d2$Province[d2$t=="37"] <- "Binh Dinh"
d2$Province[d2$t=="38"] <- "Gia Lai"
d2$Province[d2$t=="39"] <- "Phu Yen"
d2$Province[d2$t=="40"] <- "Dak Lak"
d2$Province[d2$t=="41"] <- "Khanh Hoa"
d2$Province[d2$t=="42"] <- "Lam Dong"
d2$Province[d2$t=="43"] <- "Binh Phuoc"
d2$Province[d2$t=="44"] <- "Binh Duong"
d2$Province[d2$t=="45"] <- "Ninh Thuan"
d2$Province[d2$t=="46"] <- "Tay Ninh"
d2$Province[d2$t=="47"] <- "Binh Thuan"
d2$Province[d2$t=="48"] <- "Dong Nai"
d2$Province[d2$t=="49"] <- "Long An"
d2$Province[d2$t=="50"] <- "Dong Thap"
d2$Province[d2$t=="51"] <- "An Giang"
d2$Province[d2$t=="52"] <- "BR-VT"
d2$Province[d2$t=="53"] <- "Tien Giang"
d2$Province[d2$t=="54"] <- "Kien Giang"
d2$Province[d2$t=="55"] <- "Can Tho"
d2$Province[d2$t=="56"] <- "Ben Tre"
d2$Province[d2$t=="57"] <- "Vinh Long"
d2$Province[d2$t=="58"] <- "Tra Vinh"
d2$Province[d2$t=="59"] <- "Soc Trang"
d2$Province[d2$t=="60"] <- "Bac Lieu"
d2$Province[d2$t=="61"] <- "Ca Mau"
d2$Province[d2$t=="62"] <- "Dien Bien"
d2$Province[d2$t=="63"] <- "Dak Nong"
d2$Province[d2$t=="64"] <- "Hau Giang"
d2$Province[d2$t=="65"] <- "Quoc Phong"
d1 = d1[, c("ID", "SoBD", "Province", "Math", "Viet", "ForeignLanguage", "Physics", "Chemistry", "Biology", "History", "Geography")]
d2 = d2[, c("ID", "SoBD", "Province", "Math", "Viet", "ForeignLanguage", "Physics", "Chemistry", "Biology", "History", "Geography")]
vn = rbind(d1, d2)
vn$Year = 2019
vn$English = vn$ForeignLanguage
vn19 = vn[, c("ID", "SoBD", "Province", "Math", "Viet", "English", "Physics", "Chemistry", "Biology", "History", "Geography", "Year")]
# Exam data 2018
vn = read.csv("~/Dropbox/Bao chi va Khoa hoc/Pho diem 2018/THPT 2018 Quoc gia.csv", na.strings="")
d1 = subset(vn, SoBD < 10000000)
d1$temp = as.character(d1$SoBD)
d1$t = substr(d1$temp, 1, 1)
d1$Province[d1$t=="1"] <- "Ha Noi"
d1$Province[d1$t=="2"] <- "TPHCM"
d1$Province[d1$t=="3"] <- "Hai Phong"
d1$Province[d1$t=="4"] <- "Da Nang"
d1$Province[d1$t=="5"] <- "Ha Giang"
d1$Province[d1$t=="6"] <- "Cao Bang"
d1$Province[d1$t=="7"] <- "Lai Chau"
d1$Province[d1$t=="8"] <- "Tuyen Quang"
d1$Province[d1$t=="9"] <- "Lang Son"
d2 = subset(vn, SoBD > 10000000)
d2$temp = as.character(d2$SoBD)
d2$t = substr(d2$temp, 1, 2)
d2$Province[d2$t=="10"] <- "Lang Son"
d2$Province[d2$t=="11"] <- "Bac Kan"
d2$Province[d2$t=="12"] <- "Thai Nguyen"
d2$Province[d2$t=="13"] <- "Yen Bai"
d2$Province[d2$t=="14"] <- "Son La"
d2$Province[d2$t=="15"] <- "Phu Tho"
d2$Province[d2$t=="16"] <- "Vinh Phuc"
d2$Province[d2$t=="17"] <- "Quang Ninh"
d2$Province[d2$t=="18"] <- "Bac Giang"
d2$Province[d2$t=="19"] <- "Bac Ninh"
d2$Province[d2$t=="21"] <- "Hai Duong"
d2$Province[d2$t=="22"] <- "Hung Yen"
d2$Province[d2$t=="23"] <- "Hoa Binh"
d2$Province[d2$t=="24"] <- "Ha Nam"
d2$Province[d2$t=="25"] <- "Nam Dinh"
d2$Province[d2$t=="26"] <- "Thai Binh"
d2$Province[d2$t=="27"] <- "Ninh Binh"
d2$Province[d2$t=="28"] <- "Thanh Hoa"
d2$Province[d2$t=="29"] <- "Nghe An"
d2$Province[d2$t=="30"] <- "Ha Tinh"
d2$Province[d2$t=="31"] <- "Quang Binh"
d2$Province[d2$t=="32"] <- "Quang Tri"
d2$Province[d2$t=="33"] <- "Hue-TT"
d2$Province[d2$t=="34"] <- "Quang Nam"
d2$Province[d2$t=="35"] <- "Quang Ngai"
d2$Province[d2$t=="36"] <- "Kon Tum"
d2$Province[d2$t=="37"] <- "Binh Dinh"
d2$Province[d2$t=="38"] <- "Gia Lai"
d2$Province[d2$t=="39"] <- "Phu Yen"
d2$Province[d2$t=="40"] <- "Dak Lak"
d2$Province[d2$t=="41"] <- "Khanh Hoa"
d2$Province[d2$t=="42"] <- "Lam Dong"
d2$Province[d2$t=="43"] <- "Binh Phuoc"
d2$Province[d2$t=="44"] <- "Binh Duong"
d2$Province[d2$t=="45"] <- "Ninh Thuan"
d2$Province[d2$t=="46"] <- "Tay Ninh"
d2$Province[d2$t=="47"] <- "Binh Thuan"
d2$Province[d2$t=="48"] <- "Dong Nai"
d2$Province[d2$t=="49"] <- "Long An"
d2$Province[d2$t=="50"] <- "Dong Thap"
d2$Province[d2$t=="51"] <- "An Giang"
d2$Province[d2$t=="52"] <- "BR-VT"
d2$Province[d2$t=="53"] <- "Tien Giang"
d2$Province[d2$t=="54"] <- "Kien Giang"
d2$Province[d2$t=="55"] <- "Can Tho"
d2$Province[d2$t=="56"] <- "Ben Tre"
d2$Province[d2$t=="57"] <- "Vinh Long"
d2$Province[d2$t=="58"] <- "Tra Vinh"
d2$Province[d2$t=="59"] <- "Soc Trang"
d2$Province[d2$t=="60"] <- "Bac Lieu"
d2$Province[d2$t=="61"] <- "Ca Mau"
d2$Province[d2$t=="62"] <- "Dien Bien"
d2$Province[d2$t=="63"] <- "Dak Nong"
d2$Province[d2$t=="64"] <- "Hau Giang"
d2$Province[d2$t=="65"] <- "Quoc Phong"
d1 = d1[, c("ID", "SoBD", "Province", "Math", "Viet", "English", "Physics", "Chemistry", "Biology", "History", "Geography")]
d2 = d2[, c("ID", "SoBD", "Province", "Math", "Viet", "English", "Physics", "Chemistry", "Biology", "History", "Geography")]
sonla = read.csv("~/Dropbox/Bao chi va Khoa hoc/Pho diem 2018/Son La.csv", na.strings="")
sonla$ID= sonla$ID
sonla$SoBD= sonla$ID
sonla$Province="Son La"
vn18 = rbind(d1, d2, sonla)
vn18$Year = 2018
# Merging two datasets
vn = rbind(vn19, vn18)
vn$Year = as.factor(vn$Year)
head(vn)
## ID SoBD Province Math Viet English Physics Chemistry Biology History
## 1 1 1000029 Ha Noi 7.2 5.00 6.8 6 4.5 4.00 NA
## 2 2 1000030 Ha Noi 6.2 6.25 8.0 5 4.5 3.75 NA
## 3 3 1000031 Ha Noi 6.8 5.75 7.2 NA NA NA 4.25
## 4 4 1000032 Ha Noi 5.8 4.50 9.0 NA NA NA 7.00
## 5 5 1000033 Ha Noi 7.0 5.50 3.6 NA NA NA 5.25
## 6 6 1000034 Ha Noi 7.0 6.00 7.2 NA NA NA 3.75
## Geography Year
## 1 NA 2019
## 2 NA 2019
## 3 5.5 2019
## 4 6.5 2019
## 5 7.5 2019
## 6 6.5 2019
# Plotting data for math 2019
dat = vn19[, c("Province", "Math")]
dat = na.omit(dat)
means = aggregate(dat$Math, by=list(dat$Province), FUN=mean)
colnames(means) = c("Province", "Mean")
means = transform(means, Province= reorder(Province, Mean))
p = ggplot(means, aes(x=Province, y=Mean, fill=Province))
p = p + geom_bar(stat="identity", width=1, color="white", position=position_dodge())
p = p + theme(legend.position="none") + xlab("") + ylab("Điểm môn toán ")
p + geom_text(aes(y=Mean, ymax=Mean, label=round(Mean, 2)), position= position_dodge(width=1), size=3, vjust=0.5, hjust=1, size=1, color="black") + coord_flip()
## Warning: Duplicated aesthetics after name standardisation: size
## Warning: Ignoring unknown aesthetics: ymax

Comments
In this document, I would like to share with you my experience in using ggplot2 for constructing bar plots. Actually, for me this is also a way to experiment with RMarkdown.