Ở 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) ggplot2 và ggthemes. 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é.
0 nhận xét:
Post a Comment