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.
B
iểu đồ tương quan hai hay nhiều biến mô tả mối tương quan giữa hai hay nhiều biến liên tục của đối tượng điều tra. Trong phạm vi bài này, tôi tập tành một chút và giới thiệu thành quả về 2 loại biểu đồ: (a) biểu đồ tương quan giữa 2 biến và (b) biểu đồ tương quan đa biến.

  • Biểu đồ tương quan giữa 2 biến

Ví dụ: trong công trình nghiên cứu về các chỉ tiêu sinh trưởng của cây Keo tai tượng ở các địa phương (miền núi phía Bắc) ở các độ tuổi khác nhau, từ tuổi 2 đến tuổi 8. Vấn đề đặt ra, tìm hiểu mối tương quan giữa: (i) đường kính ngang ngực và chiều cao cây; (ii) trữ lượng và đường kính ngang ngực; (iii) độ tuổi và trữ lượng;...
Trong R có thể dùng hàm plot (y ~ x, ...) để tìm hiểu mối tương quan giữa các biến trên (tương quan 2 biến).
Với data (rt2n) gồm các biến sau:


> attach(rt2n)
> names(rt2n)
 [1] "age"             "diameter"        "tree_height"     "del_diameter"  
 [5] "del_tree_height" "g"               "delg"            "m"             
 [9] "delm"            "độ_cao"        

# Tìm hiểu mối tương quan giữa trữ lượng với đường kính ngang ngực cây Keo tai tượng ở các độ tuổi khác nhau. Dùng lệnh plot (data, y~x, ...) dưới đây:

> plot(data=rt2n, m~diameter, pch=16, xlab="diameter, cm", ylab="M, m3", main="Figure 1", color="green")

# reslt Figure 1
# Tìm hiểu mối tương quan giữa trữ lượng với chiều cao cây cây Keo tai tượng ở các độ tuổi khác nhau. Dùng lệnh plot (data, y~x, ...) dưới đây:

 >  plot(data=rt2n, m~tree_height, pch=16, xlab="tree_height, m", ylab="M, m3", main="Figure 2", col="red")

# reslt Figure 2


# Tương tự, dùng hàm plot (data, y~x, ...) cho các biến khác.
# Note: Tuy nhiên, các biểu đồ trên chúng ta chỉ có thể mô tả được 2 biến. Vì vậy, để mô tả biểu đồ tương quan của nhiều biến cùng một lúc (với data (rt2n có thể thể hiện 10 biến liên tục cùng một lúc). Để làm được điều này, chúng ta có thể dùng hàm pairs.panels trong package “psych” trong R. Cụ thể dưới đây.

  • Biểu đồ tương quan đa biến
 Chúng ta có thể dùng lệnh pairs để mô tả tương quan giữa các biến như sau:

> pairs(rt2n, pch=16,col="blue", main="Figure 3")
# reslt Figure 3

Tuy nhiên, biểu đồ trên mới cho cái nhìn tổng quát phân bố giữa các biến, mà chưa nói lên mối tương quan thông qua con số cụ thể (R). Để làm được điều này, chúng ta có thể dùng lệnh sau:

>  pairs(rt2n, lower.panel=panel.smooth, upper.panel=matrix.cor, main="Figure 4")
# reslt Figure 4

# Hoặc dùng hàm pairs.panels in package (psych) như lúc đầu có đề cập. Cụ thể như sau:

>  pairs.panels(rt2n, main="Figure 5")

# reslt Figure 5

Diễn giải kết quả, đồ thị này (Figure 5) cho chúng ta biết tất cả hệ số tương quan giữa tất cả các biến số (biến liên tục). Cụ thể như, hệ số tương quan cao nhất (0.98) giữa trữ lượng (m) với đường kính ngang ngực (diameter); giữa m và g (0.95);... là những mối tương quan có hệ số cao nhất (có ý nghĩa thống kê). Tuy nhiên, giữa do_cao và del_diameter; do_cao và del_tree_height... có hệ số tương quan quá thấp và không có ý nghĩa thống kê. Ngoài ra, đồ thị trên còn cung cấp cho ta biểu đồ tán xạ, biểu đồ histogram cho từng cặp biến số và cho biết, hệ số tương quan càng cao, kích thước của font chữ (số) càng lớn.

Tuesday, 20 September 2016

T
rong bài này mình tập tành chính với biểu đồ sai số chuẩn (error bar plot), với package (sciplot). Biểu đồ sai số chuẩn cho chúng ta biết các thông số về mean, sd. Như tên gọi của nó, ngoài mục đích mô tả phân bố dữ liệu (distribution of data), biểu đồ sai số chuẩn còn giúp chúng ta so sánh giữa các nhóm đối tượng với sai số chuẩn. Nhìn vào các biểu đồ, bước đầu cho ta nhìn cái nhìn trực quan về giá trị trung bình (mean) cũng như sai số chuẩn (sd), đó là những hữu ích mà error bar plot mang lại. Hãy cùng tập tành chút với biểu đồ sai số chuẩn ở ví dụ dưới đây.


Mô tả chút về dữ liệu cho ví dụ này. Đó là dữ liệu về một số chỉ tiêu sinh trưởng cây Keo lá tràm (chu vi, đường kính ngang ngực, chiều cao cây, đường kính tán...) trồng trên vùng cát ven biển huyện Lệ Thủy tỉnh Quảng Bình ở các độ tuổi từ 6 đến 13 tuổi. Trong ví dụ mình vẽ biểu đồ sai số chuẩn phân tích kết quả các chỉ tiêu sinh trưởng cho cây Keo lá tràm. Cụ thể như sau:

> attach(st_nqb1)
> head(st_nqb1)

  otc Loai.cay Age Chu.vi     D1.3 Hvn Dtan
1 qb1      klt   8     21 6.684508 4.5  1.7
2 qb1      klt   8     27 8.594367 4.5  2.5
3 qb1      klt   8     30 9.549297 4.8  2.0
4 qb1      klt   8     16 5.092958 3.0  1.5
5 qb1      klt   8     17 5.411268 2.7  1.2
6 qb1      klt   8     20 6.366198 3.5  1.5

Để vẽ được biểu đồ sai số chuẩn, chúng ta cần package (sciplot). Nếu chưa cài đặt, chúng ta có thể cài đặt với lệnh sau:

> install.packages(“sciplot”)

VẼ BIỂU ĐỒ SAI SỐ CHUẨN

# Chỉ tiêu đường kính

> a1=bargraph.CI(Age, D1.3, xlab="Age", ylab="diameter, cm", ylim=c(0,10), col="blue")

# Chỉ tiêu chiều cao cây

> a2=bargraph.CI(Age, Hvn, xlab="Age", ylab="tree height, m", ylim=c(0,6), col="green")

# Chỉ tiêu đường kính tán

> a3=bargraph.CI(Age, Dtan, xlab="Age", ylab="canopy diameter, m", ylim=c(0,3), col="pink")

Tuy nhiên, để biểu thị biểu đồ sai số chuẩn cho nhiều chỉ tiêu sinh trưởng trên một biểu đồ tiện cho việc so sánh ban đầu, chúng ta có thể sử dụng lệnh par trong R rất hữu ích cho việc này.

> par(mfrow=c(1,3))

Với lệnh trên cho hình có 1 dòng với 3 cột. Kết quả như dưới đây.


PHÂN TÍCH KẾT QUẢ

Để phân tích kết quả trên chúng ta dùng lệnh describeBy trong package (psych) rất hữu ích cho việc phân tích các thông số thống kê như mean, sd, se... Kết quả như sau:

> library(psych)
> describeBy(st_nqb1, group=Age,skew=F,range=F)


group: 6
          vars   n  mean   sd   se
otc*         1 121  3.00 0.00 0.00
Loai.cay*    2 121  1.00 0.00 0.00
Age          3 121  6.00 0.00 0.00
Chu.vi       4 121 15.37 3.24 0.29
D1.3         5 121  4.89 1.03 0.09
Hvn          6 121  3.29 0.61 0.06
Dtan         7 121  1.17 0.23 0.02
---------------------------------------------------------------------------------
group: 7
          vars   n  mean   sd   se
otc*         1 240  7.13 2.00 0.13
Loai.cay*    2 240  1.00 0.00 0.00
Age          3 240  7.00 0.00 0.00
Chu.vi       4 240 16.40 3.51 0.23
D1.3         5 240  5.22 1.12 0.07
Hvn          6 240  4.06 0.89 0.06
Dtan         7 240  1.20 0.26 0.02
---------------------------------------------------------------------------------
group: 8
          vars   n  mean   sd   se
otc*         1 341  5.42 3.06 0.17
Loai.cay*    2 341  1.00 0.00 0.00
Age          3 341  8.00 0.00 0.00
Chu.vi       4 341 20.09 5.01 0.27
D1.3         5 341  6.39 1.60 0.09
Hvn          6 341  5.33 1.03 0.06
Dtan         7 341  1.65 0.50 0.03
---------------------------------------------------------------------------------
group: 9
          vars   n  mean   sd   se
otc*         1 122  4.00 0.00 0.00
Loai.cay*    2 122  1.00 0.00 0.00
Age          3 122  9.00 0.00 0.00
Chu.vi       4 122 21.70 4.58 0.41
D1.3         5 122  6.91 1.46 0.13
Hvn          6 122  4.70 0.61 0.06
Dtan         7 122  1.47 0.24 0.02
---------------------------------------------------------------------------------
group: 10
          vars  n  mean   sd   se
otc*         1 76  6.00 0.00 0.00
Loai.cay*    2 76  1.00 0.00 0.00
Age          3 76 10.00 0.00 0.00
Chu.vi       4 76 26.09 5.76 0.66
D1.3         5 76  8.31 1.83 0.21
Hvn          6 76  5.14 0.54 0.06
Dtan         7 76  1.94 0.35 0.04
---------------------------------------------------------------------------------
group: 12
          vars  n  mean   sd   se
otc*         1 77  2.00 0.00 0.00
Loai.cay*    2 77  1.00 0.00 0.00
Age          3 77 12.00 0.00 0.00
Chu.vi       4 77 26.55 7.12 0.81
D1.3         5 77  8.45 2.27 0.26
Hvn          6 77  5.84 0.95 0.11
Dtan         7 77  2.55 0.70 0.08
---------------------------------------------------------------------------------
group: 13
          vars  n  mean   sd   se
otc*         1 74 10.00 0.00 0.00
Loai.cay*    2 74  1.00 0.00 0.00
Age          3 74 13.00 0.00 0.00
Chu.vi       4 74 30.55 7.01 0.81
D1.3         5 74  9.73 2.23 0.26
Hvn          6 74  5.69 1.07 0.12
Dtan         7 74  2.55 0.66 0.08

Từ kết quả phân tích các thông số thống kê trên theo các độ tuổi khác nhau. Theo các nhóm (group) khác nhau, cột mean biểu thị kết quả trị số trung bình về chu vi, đường kính, chiều cao và đường kính tán cho cây Keo lá liềm ở các độ tuổi khác nhau (biểu đồ thanh trên các hình), cột sd (sai tiêu chuẩn) cho từng chỉ tiêu ở các độ tuổi khác nhau (biểu thị thanh dọc có 2 râu trên các biểu đồ).

Monday, 19 September 2016

Ở các bài trước mình có tập tành vẽ biểu đồ tương quan với nhãn bằng việc kết hợp 2 gói (package) ggplot2ggthemes. Trong phạm vi bài này, mình vẫn sử dụng 2 gói trên và có kết hợp thêm gói ggrepel để khắc phục một vài điểm nhỏ để chúng ta có được một đồ tương đối hoàn chỉnh.

Trong ví dụ mà mình vẽ biểu đồ là dữ liệu về 2 chỉ số G (%) và IV (%) để xác định tổ thành tầng cây cao, thông qua công thức của Daniel Marmillod, cụ thể:
Theo Thái Văn Trừng (1983) thì những loài cây nào có chỉ số IV (%) ≥ 5% mới thực sự có ý nghĩa về mặt sinh thái trong quần xã thực vật rừng. Để thể hiện chi tiết giá trị (độ) quan trọng IV (%) của các loài tham gia trong công thức tổ thành trên biểu đồ thì sẽ xuất hiện trường hợp có một vài loài, nhiều loài có giá trị IV (%) gần giống nhau, thậm chí có thể bằng nhau. Vì vậy, khi thể hiện trên biểu đồ (điểm, nhãn...) sẽ gần nhau, hoặc trùng nhau, như vậy trông sẽ rất khó coi và không khoa học. Thực ra, những gì mình nói ra trên đây sẽ là khó hiểu, bởi rất ít trường hợp thể hiện biểu đồ như mình và để hình dung dễ hơn mình sẽ thể hiện qua các biểu đồ để mọi người dễ hiểu.

Trong gói mới (ggrepel) mà mình kết hợp với ggplot2 và ggthemes có layer rất hữu ích đó là geom_text_repel (x, y, label...) có thể khắc phục được nhược điểm mà mình có đề cập bên trên. Chúng mình cùng bắt đầu qua ví dụ dưới đây nhé.

Trước tiên phải gọi các packages cần sử dụng:

> library(ggplot2)
> library(ggthemes)

Khi mới vẽ các điểm (dot) codes như sau:

> x1=ggplot(data=xoanmoc11, aes(x=IV, y=G))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("G, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(xoanmoc11$IV))+ scale_y_continuous(breaks=extended_range_breaks()(xoanmoc11$G))+ ggtitle("Figure 1")
Kết quả ở hình 1 (Figure 1) mới thể hiện phân bố các điểm với trục hoành là độ quan trọng (IV, %) và trục tung là tiết diện ngang (G, %) của các loài tham gia trong công thức tổ thành của tầng cây cao. 
Bây giờ để thể hiện tên các loài (nhãn) trên biểu đồ, ta thêm layer: geom_text (aes(label=...) kết quả ở hình 2 (Figure 2).

> x2=ggplot(data=xoanmoc11, aes(x=IV, y=G))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("G, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(xoanmoc11$IV))+ scale_y_continuous(breaks=extended_range_breaks()(xoanmoc11$G))+ ggtitle("Figure 2") + geom_text(aes(label=(loaicay)))


Qua hình 2 (Figure 2) ta có thể nhận thấy một điều nhiều tên loài cây gần sát nhau, trùng nhau tạo nên một biểu đồ chưa thực sự khoa học, thiếu mỹ quan như bên trên mà mình có đề cập. Để khắc phục điều này, trong phạm vi bài này mình kết hợp thêm layer: geom_text_repel (aes(x, y, label=...)) trong gói ggrepel để tạo ra biểu đồ khoa học hơn, đẹp hơn và có thể tạm gọi là “tương đối hoàn chỉnh”. Cụ thể dưới đây.

> x1=ggplot(data=xoanmoc11, aes(x=IV, y=G))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("G, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(xoanmoc11$IV))+ scale_y_continuous(breaks=extended_range_breaks()(xoanmoc11$G))+ ggtitle("Figure 3") 
> x12=x1+geom_text_repel(aes(IV,G, label=(loaicay)))


Qua hình 3 (Figure 3) các bạn có thể nhận thấy các loài cây có chỉ số IV, G gần bằng nhau không chồng lấn lên nhau nữa, mà vẫn biết giá trị IV, G của từng loài. Bạn có thể so sánh giữa hình 2 và hình 3 để thấy sự khác biệt nhé.

Dưới đây mình vẽ thêm một vài hình để các bạn thấy sự khác biệt sau khi khắc phục điểm hạn chế bên trên mà mình có đề cập bằng layer: geom_text_repel() trong gói ggrepel.


> x2=ggplot(data=xoanmoc2, aes(x=IV, y=G))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("G, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(xoanmoc2$IV))+ scale_y_continuous(breaks=extended_range_breaks()(xoanmoc2$G))+ ggtitle("Figure 4")+ geom_text(aes(label=loai))


Và thay layer: geom_text () trong ggplot 2 bằng layer: geom_text_repel() trong ggrepel.

> x22=x2+geom_text_repel(aes(IV,G, label=(loai)))


Khi vẽ biểu đồ trên với nhãn sẽ có một trường hợp nữa xuất hiện, đó là một vài loài cây có cùng một giá trị và điều đó sẽ được thể hiện ở hình dưới đây sau khi sử dụng layer: geom_text_repel().

> xts=ggplot(data=xoants1, aes(x=ni, y=Ki))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("Ni")+ ylab("Ki")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(xoants1$ni))+ scale_y_continuous(breaks=extended_range_breaks()(xoants1$Ki))+ ggtitle("Figure 6")+geom_text(aes(label=loai))


Các bạn sẽ thấy ở hình 6 (Figure 6) có nhiều điểm các loài cây cùng một giá trị, khi thể hiện tên (nhãn) các loài sẽ chồng lên nhau. Và khắc phục điều đó, ta có thể làm như sau:

> xts1=xts+geom_text_repel(aes(label=loai))


Trên đây mình có giới thiệu tới các bạn việc kết hợp 3 gói (ggplot2, ggthemes và ggrepel) khác nhau trong R để vẽ một biểu đồ khoa học, đẹp và tương đối hoàn chỉnh. Các bạn có thể thực hành để thấy sự khác biệt nhé.

Powered by Blogger.

Contact Form

Name

Email *

Message *

Pages - Menu

Popular

Total Pageviews

Popular Posts

Recent Posts

Text Widget