Thursday, October 1, 2015

Biểu đồ thanh (barplot)

Thỉnh thoảng, chúng ta có một dữ liệu đơn giản và muốn thể hiện bằng một biểu đồ để dễ nhìn hơn. Trong R có hàm giúp chúng ta đạt mục đích này rất đơn giản. Bài này sẽ giới thiệu vài hàm cơ bản. Để bắt đầu, tôi muốn giới thiệu dữ liệu về chiều cao và cân nặng của hoa hậu Việt Nam:



Name
YoB
Height
Weight
Bùi Bích Phượng
1971
1988
157
Nguyễn Diệu Hoa
1969
1990
158
Hà Kiều Anh
1976
1992
174
Nguyễn Thu Thủy
1976
1994
172
Nguyễn Thiên Nga
1976
1996
170
Nguyễn Thị Ngọc Khánh
1976
1998
172
Phan Thu Ngân
1980
2000
169
Phạm Thị Mai Phương
1985
2002
169
Nguyễn Thị Huyền
1985
2004
172
Mai Phương Thúy
1988
2006
181
Trần Thị Thùy Dung
1990
2008
182
Đặng Thị Ngọc Hân
1989
2010
173
Đặng Thu Thảo
1991
2012
173
Nguyễn Cao Kỳ Duyên
1996
2014
173

Trước khi phân tích, chúng ta cần nhập dữ liệu vào R:

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")

YoB = c(1971, 1969, 1976, 1976, 1976, 1976, 1980, 1985, 1985, 1988, 1990, 1989, 1991, 1996)

Height = c(157, 158, 174, 172, 170, 172, 169, 169, 172, 181, 182, 173, 173, 173)

Weight = c(50, NA, NA, NA, NA, 50, 49, 49, 52, 60, 61.5, 55, 49, 49)

hoahau = data.frame(Name, YoB, Height, Weight)


Để vẽ chiều cao cho từng hoa hậu, chúng ta có thể dùng hàm ggplot2 như sau:

library(ggplot2)
ggplot(data=hoahau, aes(x=Name, y=Height)) + geom_bar(stat="identity", width=0.8)

  
Thêm màu theo tên:
ggplot(data=hoahau, aes(x=Name, y=Height, fill=Name)) + geom_bar(stat="identity", width=0.8)


Nhưng trục hoành rất khó đọc! Chúng ta thử thay đổi góc độ của trục hoành:
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))


Vẫn khó đọc! Bây giờ chúng ta thử xoay trục hoành:

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("")


Tốt hơn! Nhưng chúng ta muốn thêm giá trị chiều cao cho mỗi hoa hậu:

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")


Bây giờ, chúng ta sẽ sort dữ liệu theo thứ tự để biết ai cao nhất và ai thấp nhất:

# Trước hết tạo ra một object khác gọi là hh, theo thứ tự chiều cao, dùng hàm transform
hh = transform(hoahau, Name=reorder(Name, Height))
# Vẽ
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")



No comments:

Post a Comment