Showing posts with label ggrepel. Show all posts
Showing posts with label ggrepel. Show all posts

June 08, 2017

Như có đề cập đến ở một vài cái note trước, về một vài câu chuyện nho nhỏ có liên quan đến việc ứng dụng R trong phân tích dữ liệu. Trong phạm vi cái note này, là câu chuyện liên quan đến cái biểu đồ mà mình có ứng dụng R để vẽ, với mục đích tối đa hóa các thông tin trên một biểu đồ thay vì phải tách làm hai hay sử dụng những biểu đồ đơn giản từ excel.

Tương tự như trong một vài cái biểu đồ mà mình có vẽ giúp một bạn trong luận án thạc sĩ năm 2015 (Trường ĐH NLTN). Cũng là “cái biểu đồ”, giáo viên hướng dẫn chưa biết (chưa nghe nói về R) ý nghĩa của cái biểu đồ này, trong khi học viên chưa giải thích được (do được sự trợ giúp) nên cô phán rằng “bỏ đi, quá rắc rối”. Trong trường hợp này cũng vậy, trong hội đồng nghiệm thu đề tài cấp Nhà nước, mình cũng sử dụng R với sự hỗ trợ của gói ggplot2, gridExtra và ggrepel để vẽ biểu đồ tương quan lồng ghép với biểu đồ phân bố. Tuy nhiên, khi cô nhận xét trước hội đồng, đặc biệt liên quan đến biểu đồ, cô nói “lần đầu tiên tôi nhìn thấy cái biểu đồ như vậy”. Và, “tôi không hiểu hai cái đường màu đỏ này có ý nghĩa gì”?  (hình dưới). Là người trực tiếp vẽ biểu đồ, tôi hiểu cái ý của cô. Nhưng tôi cũng chẳng thể đứng dậy giải thích ý nghĩa của cái biểu đồ trước mặt các thành viên hội đồng như vậy. Thôi thì. Ngồi mỉm cười trừ.

Đúng là nhận xét của cô không sai. Cái thiếu sót của tôi là chưa sử dụng hết ngôn từ để làm sáng tỏ hết ý nghĩa của biểu đồ cho người đọc rõ. Qua đây mình cũng phải nhìn nhận lại chính mình trong việc hành văn để diễn giải ý nghĩa của những biểu đồ. Không thể “để đấy và không nói gì cả”. Thực ra, biểu đồ nào mình cũng có nói ít nhiều, chứ không kiểu “để đấy”, ai hiểu gì thì hiểu. Có thể mình chưa nói hết. Nên ít nhiều làm khó cho người đọc, đặc biệt là những ai chưa quan tâm nhiều về R.

Nực cười hơn. Không biết có phải một thành viên hội đồng hơi cường điều hóa không, khi thầy nhận xét một câu “tôi phải dùng kính lúp để soi các biểu đồ”. Phải chăng thầy có tuổi nên mắt hơi kém. Nhưng không. Thầy vẫn trung tuổi, có đến nỗi nào đâu? Tuy nhiên, qua đó nhận xét như vậy mình cũng phải nhìn nhận lại mình. Bởi đó là cái thiếu sót của mình trong việc chưa làm rõ hết được ý nghĩa của biểu đồ cũng như chưa làm rõ hơn các biểu đồ trong báo cáo.

Thôi thì “nhận dạng nhầm lẫn của người khác cũng có nghĩa là nâng cao kĩ năng nhận dạng nhầm lẫn của chính mình” [1]. Thực sự, đó là một trong những trải nghiệm trên tinh thần cầu thị mình không thể không nhìn nhận lại chính mình. Bởi, “nếu dùng ngôn ngữ không đúng, thì những gì được phát biểu sẽ bị hiểu sai; nếu những gì phát biểu bị hiểu sai, thì những gì cần phải làm sẽ không thực hiện được, và những gì không thực hiện được, đạo đức và nghệ thuật sẽ trở nên tồi tệ hơn” - Khổng Tử [1]. Dù ít dù nhiều thông qua những góp ý như vậy mình mới rút ra được nhiều bài học trong việc xử lý, trình bày dữ liệu, đặc biệt là thể hiện dữ liệu bằng các hình, biểu đồ. Tuy nhiên, việc sử dụng R để tạo nên một vài biểu đồ có ý nghĩa không đơn giản chút nào, chưa kể đến việc phải đầu tư suy nghĩ, mất thời gian... mà ngay cả những người đi trước (chắc quen sử dụng SPSS, Excel) cũng chưa tạo điều kiện để hiểu và chấp nhận cho.

===========================================
[1] Nguyễn Văn Tuấn (2013). Từ nghiên cứu đến công bố - Kỹ năng mềm cho nhà khoa học. Nxb Tổng hợp TP HCM, tr 31.

September 15, 2016

 bài trước, mình có vẽ biểu đồ phân bố các loài cây theo 2 đại lượng IV% và G% trong công thức tổ thành. Tuy nhiên, hiện nay các đề tài nghiên cứu về cấu trúc tầng cây cao, lớp cây tái sinh, chúng ta nên áp dụng chỉ số quan trọng IV (%) thông qua 3 đại lượng (F%, Gi% và Ni%). Theo Curtis and McIntosh (1951) đã so sánh vai trò của các loài trong quần xã thông qua chỉ số quan trọng IV (Importance Value of species). Chỉ số quan trọng IV được tính bình quân từ tổng của 3 đại lượng là độ thường gặp tương đối (F%), mật độ tương đối (N%) và độ ưu thế tương đối (G%), cụ thể qua công thức:
Trong đó:
-       F%: độ thường gặp tương đối của một loài (là tỷ lệ phần trăm độ thường gặp của loài so với tổng độ thường gặp của tất cả các loài trong quần xã);
-       N%: mật độ tương đối của một loài (là tỷ lệ phần trăm số cá thể của loài này so với tổng số cá thể của các loài trong quần xã);
-       G%: độ ưu thế tương đối của một loài (là tỷ lệ phần trăm tổng tiết diện ngang thân cây của loài so với tổng tiết diện ngang thân cây của các loài trong quần xã.
==>  Tổng cộng (F% + N% + G%) = 300%. ===> Từ đó xác định được công thức tổ thành.

Trong phạm vi bài này mình không giới thiệu đến cách vẽ biểu đồ phân bố với nhãn (tên), bởi ở bài trước mình đã giới thiệu chi tiết việc kết hợp 3 gói (ggplot2, ggthemesvà ggrepel) để vẽ một biểu đồ với nhãn khoa học, đẹp và tương đối hoàn chỉnh. Ở bài này, mình đề cập đến việc tính chỉ số mức độ quan trọng (IV%) tính qua 2 trường hợp cụ thể.

Tính chỉ số (F%)

Trước nay, đa số chúng ta xác định công thức tổ thành (CTTT) chỉ qua 2 đại lượng N% và G%. Vì vậy, sẽ là khó hình dung cách tính đại lượng (F%). Thực ra, đại lượng F% không phải mới đề cập, nhưng trong quá trình giảng dạy chúng ta ít đề cập, cũng như không áp dụng nên rất khó mường tượng khi tính toán chỉ số F này. Để dễ hiểu, chúng ta có thể lập ô tiêu chuẩn (OTC - ô cấp 1) với kích thước 1.000m2, trong ô cấp 1 lập thêm các ô cấp 2 với kích thước 100m2 (25m x 20m), tiếp đến trong ô cấp 2 lập thêm các ô cấp 3 với kích thước 4m2 (2m x 2m). Cụ thể trong hình dưới đây:


  
Điều tra trong OTC (cấp 1, cấp 2 và cấp 3). Cụ thể:
-       OTC (cấp 1): điều tra tầng cây cao, cây tái sinh cho tất cả các loài có đường kính ngang ngực ≥ 6cm (hoặc D1.3 ≥ 10cm, tùy mục tiêu nghiên cứu) về: thành phần loài cây (tên loài cây: tên latinh, tên phổ thông...), đường kính, chiều cao cây, đường kính tán...
-       Ô cấp 2: điều tra tất cả các cây gỗ tái sinh có đường kính ngang ngực < 6cm và Hvn > 1,3m về: loài, chiều cao cây, đường kính, sinh trưởng, chất lượng sinh trưởng...
-       Ô cấp 3: điều tra mức độ thường gặp tương đối của một loài (F%), tức là trong ô 4m2 điều tra xem loài i có xuất hiện hay không? Nghĩa là trong 50 ô cấp 3 xem loài i xuất hiện bao nhiêu lần?

Xác định công thức tổ thành qua chỉ số mức độ quan trọng (IV%)

Để xác định CTTT trong quần xã qua chỉ số quan trọng (IV%), mình lấy ví dụ cho 2 trường hợp: (i) tính chỉ số IV% qua 2 đại lượng N% và G% và (ii) tính chỉ số IV% qua 3 đại lượng N%, G% và F%. Cụ thể như sau:

Trường hợp 1: tính chỉ số IV% thông qua 2 đại lượng N% và G%. Công thức tổ thành như sau:
31,50 Vot + 24,82 Cal + 6,40 Chel + 5,92 Tran + 5,30 Sotrl + 4,63 Cor + 4,23 Deađ + 3,85 Sop + 3,76 Thc + 9,58 lk

Trường hợp 2: tính chỉ số IV% qua 3 đại lượng N%, G% và F%. Công thức tổ thành như sau:

33,12 Vot + 25,64 Cal + 7,30 Chel + 6,98 Tran + 6,56 Sotrl + 4,45 Hoq + 3,09 Cor + 12,86 lk

Qua hai công thức tổ thành trên có thể đi đến nhận xét sau:
-       Thứ tự các loài trong công thức tổ thành không có sự thay đổi lớn. Chỉ số IV% khi tính qua 3 đại lượng (N%, G% và F%) có tăng một chút so với mức độ quan trọng IV% khi tính bằng 2 đại lượng (N% và G%);
-       Thành phần loài tham gia trong công thức tổ thành ở trường hợp 2 giảm đi 3 loài (Dead, Sop và Thc) và xuất hiện 1 loài mới (Hoq) so với trường hợp 1.

Để thể hiện chi tiết hơn về thành phần các loài cũng như giá trị các đại lượng của từng loài thông qua biểu đồ phân bố với nhãn dưới đây cho 2 trường hợp trên.

Trường hợp 1:

- Phân bố giữa IV% và Gi%
> o11=ggplot(data=o1, aes(x=IV, y=Gi))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("Gi, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(o1$IV))+ scale_y_continuous(breaks=extended_range_breaks()(o1$Gi))+ ggtitle("Figure 1")
> o111=o11+geom_text_repel(aes(IV,Gi, label=(loai),col="red"))


- Phân bố giữa IV% và Ni%
 > o12=ggplot(data=o1, aes(x=IV, y=Ni))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("Ni, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(o1$IV))+ scale_y_continuous(breaks=extended_range_breaks()(o1$Ni))+ ggtitle("Figure 2")
> o112=o12+geom_text_repel(aes(IV,Ni, label=(loai)))


 Trường hợp 2:

- Phân bố giữa IV% và Ni%
 > o13=ggplot(data=o2, aes(x=IV, y=Ni))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("Ni, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(o2$IV))+ scale_y_continuous(breaks=extended_range_breaks()(o2$Ni))+ ggtitle("Figure 3")
> o113=o13+geom_text_repel(aes(IV,Ni, label=(loai)))

  - Phân bố giữa IV% và Gi%

> o14=ggplot(data=o2, aes(x=IV, y=Gi))+ geom_point()+ theme_bw()+ theme_classic()+ xlab("IV, %")+ ylab("Gi, %")+ geom_rangeframe()+ theme_tufte()+ scale_x_continuous(breaks=extended_range_breaks()(o2$IV))+ scale_y_continuous(breaks=extended_range_breaks()(o2$Gi))+ ggtitle("Figure 4")
> o114=o14+geom_text_repel(aes(IV,Gi, label=(loai)))





Qua 2 trường hợp trên các bạn có thể hình dung và so sánh rõ hơn việc áp dụng cách tính chỉ số mức độ quan trọng (IV%) trong việc xác định công thức tổ thành rừng thông qua 2 hay 3 đại lượng.

September 14, 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") + geom_text(aes(label=(loaicay)))
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).
> 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 2") 
> x12=x1+geom_text_repel(aes(IV,G, 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")
> x13=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é.

chủ đề

Ăn của rừng bài báo khoa học bản quyền bành trướng Bảo vệ cây là bảo vệ chính mình biến đổi khí hậu Biển Đông Biết sai vẫn cứ làm biểu đồ biểu đồ hộp biểu đồ sai số chuẩn Biểu đồ tương quan Biểu đồ với nhãn bon-sai boxplot buoc-dau-nghien-cuu-khoa-hoc but-ky-doi-toi Cái tài Cái tâm Cái tầm canh tác đất dốc Cây xanh đô thị Cha chung không ai khóc cha nào con nấy Chân thiện mỹ chân trong chân ngoài chạy chức chạy quyền Che chở Chết toàn tập chọn cách ta sống chữ tín chuyện giờ mới kể có vấn đề Cơm áo gạo tiền Con cháu các cụ con người biến thái Con ông cháu cha công nghệ 4.0 correlation matrix corrgram corrplot Cứ đi rồi sẽ tới cuộc cách mạng 4.0 Đam mê đàn gảy tai trâu danh dự danh xưng phù phiếm Đạo đức sống đào tạo sau đại học Đạo văn Đấu tranh sinh tồn day-do Đẹp trong tâm hồn Đi tắt đón đầu dở khóc dở cười đọc nghe nhìn và cảm nhận Dồn điền đổi thửa Động lực dựa vào nhau mà sống error bar plot GGalyy ggcorplot ggExtra ggiraph ggplot2 ggrepel ggthemes Giáng sinh Giáo dục giàu nghèo giục tốc bất đạt Góc quê gridExtra Hài lòng Hai mặt một lời hãy là chính mình hãy sống có trách nhiệm hơn hèn nhát Hiệu sau ứng bão hiệu ứng domino formosa Hiệu ứng sau bão Hòa cả làng học giả bằng thật hoc-lam-tho hoc-r-moi-ngay Ích kỷ KH&CN khả năng Khoán chi Không lối thoát Kiểm định thống kê kỹ năng mềm Kỷ niệm vùng miền Label lan rừng Lão Hạc thế kỷ 21 Liêm chính lính đánh thuê Lợi dụng lợi ích nhóm lừa trên gạt dưới lười suy nghĩ Lương thiện giả vờ Lương y Ma trận tương quan Mẹ Miền cát trắng miền đất hứa Mộc Châu món ăn địa phương Mùa gặt Mục đích sống Mường La Nghịch lý chất lượng - số lượng Nghiên cứu khoa học Ngồi chơi xơi nước Nhân cách nhu cầu Những cung đường tôi đã qua NN&PTNT phân cấp sinh trưởng phân tích hậu định phan-bien-xa-hoi plot3D psych Quán Nha R Rừng ngập mặn rước hổ về nhà rvg sach-hay SARS-CoV-2 sau-luy-tre-lang sciplot Số cây Số liệu trống không Sông Châu sống chết mặc ai sức ỳ sức ỳ bản thân suy thoái Tầm lùn tâm sự tâm sự buồn thảm họa formosa thảm họa môi trường tham nhũng Thân cô thế cô thắng cố ngựa Thăng trầm Thấy vậy mà không phải vậy Thế cây Thế cây cổ Thế cây thế người Thông điệp cuộc đời Thống kê mô tả Thông tư Thước đo lòng người Thủy điện Tiên trách kỷ hậu trách nhân Tình bạn cao đẹp Tình người Tố chất làm khoa học tội đếch gì mà phải ghét ai Tôi sợ giầu lắm track changes Trải nghiệm tre già măng mọc trở mặt Trung thực tư duy Tự sự Tư tưởng thụt lùi tuy duy nhiệm kỳ Ứng dụng R trong lâm nghiệp Văn hóa cảm ơn Văn hóa giao thông văn hóa ngầm Văn hóa xin lỗi Xấu khen đẹp chê Xỏ nhầm giầy xoay đầu đổi đít Ý tưởng
Powered by Blogger.

Disqus Shortname

Widget Recent Post No.

Widget Random Post No.

Widget Recent Comment No.

PageNavi Results No.

Labels Max-Results No.

Comments system

Contact Form

Name

Email *

Message *

bài đăng phổ biến

số lượt ghé qua trang blog

Bài đăng nổi bật

Thế cây thế người

T hế trong CÂY CẢNH thể hiện các chi tiết về CẤU TRÚC ở mọi phương diện, đa góc nhìn (trên dưới trái phải ngang dọc), trong đ...

Bài đăng phổ biến

bài xem nhiều nhất