Ở
|
các bài trước mình có tập tành vẽ biểu đồ hộp kết hợp giữa package ggplot2 với package ggthemes. Trong phạm vi bài này, mình vẫn kết
hợp 2 gói trên để vẽ biểu đồ, tuy nhiên, mình có thêm các layer như (coor_flip(), theme(legend.positon =“...”,
notch = T, notchwidth = ...,
outlier.colour = “...”, outlier.size = ...)
để tạo nên những biểu đồ đẹp và sinh động hơn có thể. Bạn nào quan tâm, cùng
mình tập tành vẽ biểu đồ hộp (boxplot) với sự kết hợp 2 gói ggplot2 và
ggthemes, trong đó có thêm một số layer mà mình có đề cập như trên.
Nói qua
chút về data.frame (). Dữ liệu là một số chỉ tiêu sinh trưởng của cây Keo lá liềm
(Acacia crassicarpa) trồng trên vùng
cát ven biển huyện Triệu Phong, tỉnh Quảng Trị. Thí nghiệm gồm 4 công thức (ĐC,
CT 1, CT2 và CT 3), ở 2 thời kỳ khác nhau (tuổi 1,2 và tuổi 2,3). Các chỉ tiêu
sinh trưởng như: stump diameter, tree height, canopy diameter, number longer
boughs 50 cm, number main trunks, tree height...
Cùng bắt đầu
nhé:
# data =
TrieuPhong
>
library (ggplot2)
>
library (ggthemes)
# Mình chỉ lấy ví dụ về chỉ tiêu leaf
litterfall ở 2 độ tuổi khác nhau, các chỉ tiêu khác cũng tương tự.
Biểu đồ hộp
(boxplot) như các bài trước, không có các layer (coor_flip(),
theme(legend.positon =“...”, notch = T, notchwidth = ..., outlier.colour = “...”, outlier.size = ...) sẽ cho
kết quả như sau (Figure 1).
#code:
>
Age2.3tp61=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+
geom_boxplot(aes(fill=CTTN))+ theme_bw()+ theme_classic()+
xlab("CTTN")+ ylab("Leaf litter fall,
kg/tree")+ggtitle("Leaf litterfall of A. crassicarpa 2.3 years old in
Trieu Phong")+ geom_rangeframe()+ theme_tufte()+
scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))
# Với code
như trên, thêm layer: coord_flip(). Kết quả
Figure 2.
>
Age2.3tp62=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+
geom_boxplot(aes(fill=CTTN))+ theme_bw()+ theme_classic()+
xlab("CTTN")+ ylab("Leaf litter fall,
kg/tree")+ggtitle("Figure 1. Leaf litterfall of A. crassicarpa 2.3
years old in Trieu Phong")+ geom_rangeframe()+ theme_tufte()+
scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))+ coord_flip()
Kết quả
hình 2 có đôi chút khác so với hình 1. Hình 2 các hình hộp quay ngang thay vì đứng
dọc như hình 1. Lớp coord_flip()
có công dụng để làm điều đó.
# Với code
như trên, thêm layer: coord_flip()
+ theme(legend.position = “top”. Kết quả
Figure 3.
>
Age2.3tp63=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+
geom_boxplot(aes(fill=CTTN))+ theme_bw()+ theme_classic()+
xlab("CTTN")+ ylab("Leaf litter fall,
kg/tree")+ggtitle("Figure 3. Leaf litterfall of A. crassicarpa 2.3
years old in Trieu Phong")+ geom_rangeframe()+ theme_tufte()+
scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))+ coord_flip()+ theme(legend.position="top")
Kết quả
hình 3 có một điểm khác so với hình 2, đó là ký hiệu công thức thí nghiệm ở
trên cùng “top” thay vì bên phải.
# Với code
như trên, thêm layer: theme(legend.position = “top”.
Ở layer: geom_boxplot() ta thêm notch = T,
notchwidth = 0.5. Kết quả như sau:
> Age2.3tp64=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+ geom_boxplot(aes(fill=CTTN), notch=T, notchwidth=0.5)+ theme_bw()+ theme_classic()+ xlab("CTTN")+ ylab("Leaf litter fall, kg/tree")+ggtitle("Figure 4. Leaf litterfall of A. crassicarpa 2.3 years old in Trieu Phong")+ geom_rangeframe()+ theme_tufte()+ scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))+ theme(legend.position="top")
# Tương tự,
ở layer: geom_boxplot() ta thêm notch = T,
notchwidth = 0.5 + outlier.colour="blue",
outlier.size=3. Kết quả như sau:
>
Age2.3tp65=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+
geom_boxplot(aes(fill=CTTN), notch=T, notchwidth=0.5,
outlier.colour="blue", outlier.size=3)+
theme_bw()+ theme_classic()+ xlab("CTTN")+ ylab("Leaf litter
fall, kg/tree")+ggtitle("Figure 5. Leaf litterfall of A. crassicarpa
2.3 years old in Trieu Phong")+ geom_rangeframe()+ theme_tufte()+ scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))+
theme(legend.position="top")+ coord_flip()
Kết quả
hình 5 không có sự khác biệt mấy, nếu để ý ta thấy chỉ thay đổi các chấm màu xanh (blue) thay vì màu đen ở các hình trên. Đó là outlier. Có thể thay đổi các màu khác,
cũng như size khác. Hãy thử nghiệm để thấy sự khác biệt. Bây giờ mình thay "blue"
thành "red" và size = 3 thành size = 2, để ý sẽ thấy sự khác biệt nho nhỏ này.
>
Age2.3tp61=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+
geom_boxplot(aes(fill=CTTN), notch=T,
notchwidth=0.5, outlier.colour="red",
outlier.size=2)+ theme_bw()+ theme_classic()+ xlab("CTTN")+
ylab("Leaf litter fall, kg/tree")+ggtitle("Figure 5. Leaf
litterfall of A. crassicarpa 2.3 years old in Trieu Phong")+
geom_rangeframe()+ theme_tufte()+ scale_y_continuous(breaks=extended_range_breaks()(Age2.3tp$litter_fall))+
theme(legend.position="top")+ coord_flip()
Trên đây
là một số code nho nhỏ, không có gì to tác cả. Tuy nhiên, để tạo ấn tượng ban đầu
trên mỗi biểu đồ thì đó có thể coi là điểm nhấn của biểu đồ. Hãy cùng trải
nghiệm để thấy sự khác biệt dù là nhỏ nhất.
1 comments:
Cảm ơn bạn. Bạn có cách nào labeling outliers ko?
Post a Comment