Thursday, 6 May 2021

GGPLOT2 là một trong những gói (packages) rất mạnh để tạo nên những đồ họa đẹp (thậm chí là rất đẹp nếu kết hợp cùng một vài gói khác) và phân tích dữ liệu trong nghiên cứu khoa học. Trong bài trước, mình có chia sẻ một vài thông tin về gói "ggplot2" thông qua cách cài đặt các packages trên R và mình có đề cập đến việc kết hợp cùng một vài gói khác với ggplot2 để tạo nên những biểu đồ khoa học, trực quan hơn. Trong phạm vi cái note này, mình sẽ chia sẻ 3 gói có thể kết hợp cùng với gói ggplot2 hoặc có thể kết hợp đồng thời cả 2 hoặc 3 gói khác nhau (thậm chí là nhiều hơn 3 gói) để ta tạo nên các biểu đồ theo mục đích của bài nghiên cứu hay bài thuyết trình trong hội nghị, hội thảo.


 GGPLOT2 vs. GGREPEL


 GGREPEL nhằm định vị và giúp tránh chồng chéo các nhãn trên các biểu đồ khi dùng gói “ggplot2”. Khi kết hợp gói “ggrepel” các nhãn trên vùng của biểu đồ sẽ được đẩy lùi ra xa nhau, cách xa các điểm dữ liệu cũng như cách xa các cạnh (các trục) của biểu đồ. “ggrepel” sẽ cung cấp các “geoms” nhằm giúp cho các biểu đồ khi dùng “ggplot2” được sinh động, trực quan hơn thông qua khắc phục việc các nhãn trên biểu đồ bị chồng chéo trong quá trình tạo nên các biều đồ theo mục đích của bạn.

Trong trường hợp này mình sẽ sử dụng layer: geom_text () trong gói “ggplot2” và layer: geom_text- repel () trong gói “ggrepel” để minh chứng cho điều đó. Dữ liệu mình muốn thể hiện là số loài cây rừng tự nhiên tham gia công thức tổ thành chính trong các lâm phần điều tra và muốn thể hiện tên các loài tham gia (tên viết tắt) trên biểu đồ.

Các biến trong file dữ liệu:

> names(TT)
[1] "Location"    "OTC"         "Loai"        "N"           "Loaithamgia" "Nthamgia"   
[7] "HL"          "X"         

Gọi gói “ggplot2”

> library(ggplot2) 
Mã lệch để vẽ biểu đồ khi dùng layer: geom_text() trong gói (ggplot2):

 > g3=ggplot(data=TT, aes(x=Loai, y=Nthamgia, fill=Location))+geom_point(aes(color=Location))+xlab("Tng s loài")+ylab("Ni, loài")+geom_text(aes(label=Loaithamgia),hjust = 0, nudge_x = 0.05)+theme(legend.position="top") 

Như biều đồ cho thấy, ở các lâm phần có số loài tham gia chính vào công thức tổ thành bằng nhau hoặc hơn kém nhau 1-2 loài thì việc thể hiện tên các loài cây (ký hiệu loài) sẽ bị chồng chéo lên nhau, nhìn rất khó coi. Thậm chí ở góc dưới bên phải của biểu đồ một số loài còn không thể hiện được. Để khắc phục hạn chế đó, mình sử dụng layer: geom_label_repel () trong gói “ggrepel” để thay thế cho layer geom_text ()  trong gói (ggplot2).

Gọi gói “ggrepel” 

> library(ggrepel)

 > g3=ggplot(data=TT, aes(x=Loai, y=Nthamgia, fill=Location))+geom_point(aes(color=Location))+xlab("Tng s loài")+ylab("Ni, loài")+geom_label_repel(aes(label=Loaithamgia))+theme(legend.position="top") 

Kết quả cho thấy, hạn chế nêu trên đã được giải quyết bằng việc dùng layer: geom_label_repel (). Vì vậy, việc kết hợp gói “ggplot2” vs. gói “ggrepel”, cụ thể với việc thay thế layer: geom_text () trong gói “ggplot2” BẰNG layer: geom_text- repel () trong gói “ggrepel” nhằm mục đích “định vị” và giúp “tránh chồng chéo” các nhãn (tên các loài cây tham gia chính vào trong công thức tổ thành rừng tại các lâm phần điều tra) trên biểu đồ. Giúp biểu đồ dễ nhìn, sinh động, logic, và khoa học hơn. Tuy nhiên, biểu đồ này thực sự cũng chưa đẹp. Để có biểu đồ đẹp hơn mình sẽ kết hợp một lúc cả 3 gói (“ggplot2”, “ggrepel”, và “ggthemes”) và được đề cập ở phần cuối của cái note này.


 GGPLOT2 vs. GRIDEXTRA


 Gói “gridExtra” cung cấp một số chức năng để người dùng làm việc với đồ họa dạng “lưới”, đặc biệt là để sắp xếp nhiều ô (dòng và cột) trên một biểu đồ.

Sau khi bạn đã tạo nên được những biểu đồ tương đối đẹp NHƯNG muốn thể hiện hay tạo hai hoặc trên hai biểu đồ, và ghép chúng lại với nhau trên cùng một biểu đồ thì gói “ggplot2” chưa làm được điều đó. Vì vậy, gói “gridExtra” sẽ giải quyết giúp bạn vấn đề đó.

Tạo biểu đồ cho từng biến (chỉ tiêu)

Chỉ tiêu đường kính gốc của cây Bần chua (cây ngập mặn) tại các xã ven biển tỉnh Thái Bình

g=ggplot(data=BC,aes(x=xa,y=Dg))+geom_boxplot()+xlab("Xã")+ylab("Dg (cm)")+theme(axis.text.x = element_text(angle = 90))

Chiều cao cây (Hvn)

g1=ggplot(data=BC,aes(x=xa,y=Hvn))+geom_boxplot()+xlab("Xã")+ylab("Hvn (m)")+theme(axis.text.x = element_text(angle = 90)) 

Đường kính tán cây (Dt)

g2=ggplot(data=BC,aes(x=xa,y=Dt))+geom_boxplot()+xlab("Xã")+ylab("Dt (m)")+theme(axis.text.x = element_text(angle = 90)) 

> library(gridExtra)

 Để thể hiện 3 biểu đồ tương ứng với 3 chỉ tiêu sinh trưởng của cây Bần chua (đường kính gốc, chiều cao cây, và đường kính tán cây) trên cùng 1 biểu đồ theo 3 cột hoặc 3 dòng chúng ta có thể áp dụng các lệnh dưới đây:

> grid.arrange(g,g1,g2,nrow=1,ncol=3) 


 


 GGPLOT2 vs. GGREPEL vs. GGTHEMES


 Như bên trên mình có đề cập, mình sẽ kết hợp một lúc cả 3 gói (“ggplot2”, “ggrepel”, và “ggthemes”) để tạo nên một biểu đồ tương đối đẹp (tạm gọi là hoàn chỉnh) có thể sử dụng trong bài thuyết trình hội nghị hay đăng trong báo cáo tổng kết. Để thể hiện các giá trị cho tổng số loài (trung x) cũng như số loài tham gia chính trong công thức tổ thành (trục y) được hợp lý hơn mình dùng layer: scale_y_continuous() và scale_x_continuous () trong gói “ggplot2" và màu nền của biểu đồ được rõ hơn mình sẽ dùng layer: theme_tufte () trong gói “ggthemes” để giải quyết vấn đề đó. 

> g3=ggplot(data=TT, aes(x=Loai, y=Nthamgia, fill=Location))+geom_point(aes(color=Location))+xlab("Tng s loài")+ylab("Ni, loài")+geom_rangeframe()+theme_tufte()+scale_y_continuous(breaks=extended_range_breaks()(TT$Nthamgia))+geom_label_repel(aes(label=Loaithamgia))+scale_x_continuous(breaks=extended_range_breaks()(TT$Loai))+theme(legend.position="top")

Mình nghĩ biểu đồ trên là tương đối “đẹp” sau khi đã khắc phục được một vài hạn chế trong việc thể hiện các nhãn bị chồng chéo cũng chưa định vị được các vị trí các nhãn hoặc thể hiện các giá trị của trục hoành, trục tung hoặc thể hiện nền của biểu đồ sao cho phù hợp và dễ nhìn so với các nhãn thể hiện của biểu đồ. 


Trong phạm vi cái note này mình tập tành một chút với sự kết hợp giữa các gói khác nhau khi vẽ biểu đồ, với mục đích tạo nên những biểu đồ tương đối đẹp. “ggplot2” là một gói rất mạnh để giúp bạn việc đó. Tuy nhiên, bên cạnh những biểu đồ đẹp, thể hiện được nhiều thông tin (giá trị) vẫn còn một vài điểm hạn chế. Vì vậy, để tạo nên những biểu đồ tương đối hoàn chỉnh và tùy theo mục đích sử dụng của người dùng thì việc kết hợp các gói với nhau là rất cần thiết và hữu ích. Trên đây, mình có kết hợp giữa gói “ggplot2 vs. ggrepel”, giữa “ggplot2 vs. gridExtra”, hay kết hợp cả 3 gói với nhau “ggplot2 vs. ggrepel vs. ggthemes” hay nhiều hơn nữa nếu có thể để tạo nên những biểu đồ theo ý muốn.

Chúc các bạn tập tành vui khỏe, gặp lại ở note sau nhé. Trân trọng!

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