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("Tổng 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("Tổng 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
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("Tổng 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 đồ.
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