August 07, 2016

 các bài trước mình có tập tành vẽ biểu đồ hộp kết hợp giữa 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.

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, tree height...

Cùng bắt đầu nhé:
# data = TrieuPhong
> 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:
> 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))


# 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()


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")


 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")

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()


 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.3tp61=ggplot(data=Age2.3tp, aes(Age2.3tp$CTTN, y=litter_fall))+ geom_boxplot(aes(fill=CTTN), notch=T, notchwidth=0.5outlier.colour="red", outlier.size=2)+ 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()


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.

1 comments:

Unknown said...

Cảm ơn bạn. Bạn có cách nào labeling outliers ko?

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

bài đã đă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