Wednesday, 21 September 2016

 các bài trước mình có tập tành vẽ biểu đồ hộp kết hợp giữ 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.
 > names(TrieuPhong)

 [1] "Local"                  "Age"                    "CTTN"                 
 [4] "stump_diameter"         "tree_height"            "canopy_diameter"      
 [7] "main_trunk"             "bough_50_cm"            "phan_than"            
[10] "song_chet"              "stump_diameter_growth"  "tree_height_growth"   
[13] "canopy_diameter_growth" "litter_fall"           

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, leaf litterfall...


Cùng bắt đầu nhé:

> 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 như sau:

> 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))
> Age2.3tp61


# 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()
> Age2.3tp62



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")
> Age2.3tp63


 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")
> Age2.3tp64


Kết quả hình 4 cho thấy, hình hộp ở 4 công thức thí nghiệm có tạo ra cái “eo” nhìn sinh động hơn so với để nguyên cả hộp. Lệnh notch =T, nochwidth = 0.5 có tác dụng cho việc đó. Tuy nhiên, thay vì giá trị 0.5 có thể thay bằng các giá trị khác từ 0.1 - 1.0 hãy cùng trải nghiệm để thấy sự khác biệt dù là nhỏ nhất.
  
# 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()
> Age2.3tp65

 
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.3tp66=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 6. 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()
> Age2.3tp66 

  


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.

0 nhận xét:

Post a Comment

Powered by Blogger.

Contact Form

Name

Email *

Message *

Pages - Menu

Popular

Total Pageviews

Popular Posts

Recent Posts

Text Widget