Với các công cụ vẽ cơ bản có sẵn, ta có thể vẽ nhiều biểu đồ trên cùng một vùng không gian. Tuy nhiên việc này tương đối phức tạp, đòi hỏi một số kỹ năng nhất định. Mặt khác dạng của biểu đồ không phong phú và chất lượng phần nào bị hạn chế. Do đó khi việc vẽ nhiều biểu đồ có yêu cầu cao, ta nên sử dụng các công cụ khác. Một trong các công cụ đó là phụ kiện lattice
.
lattice
Phụ kiện lattice
được xây dựng bởi Deepayan Sarkar nhằm mục đích chính là hỗ trợ cho việc vẽ nhiều biểu đồ trong cùng một vùng không gian. Tất nhiên ta cũng có thể sử dụng nó để vẽ một biểu đồ. Một số đặc điểm chính của lattice
là:
lattice
đều là các hàm vẽ chính (hay hàm vẽ cấp cao), không có các hàm vẽ bổ sung.trellis
. Như vậy ta có thể truy xuất các phần tử của đối tượng này để thực hiện thêm các xử lý nếu cần thiết.Các chi tiết về phụ kiện này được trình bày trong tập tin "Package "lattice"" và bạn có thể tải về tại địa chỉ:
cran.r-project.org/web/packages/lattice/index.html
lattice
Do các hàm vẽ trong lattice
phải thực hiện toàn bộ các chi tiết của biểu đồ nên các đối số đóng vai trò quan trọng hơn. Một số đối số của lệnh vẽ cơ bản cũng được dùng như xlab
hay ylim
, một số đối số được mở rộng hơn như type
và nhiều đối số mới được đưa vào. Dưới đây ta xem xét một số đối số thường được sử dụng cho nhiều loại biểu đồ.
Đối số đầu tiên được khai báo liên quan đến các biến dùng để vẽ. Dạng tổng quát của đối số này là:
bien_y ~ bien_x | thong_so
Trong cú pháp này thì :
bien_y
: là biến phụ thuộc. Ta có thể không có biến này trong một số trường hợp như biểu đồ hộp.bien_x
: là biến độc lập dùng để vẽ các biểu đồ.|
để chỉ điều kiện hay ràng buộc.thong_so
: là các biến liên quan đến điều kiện hay ràng buộc+
hay dấu *
để liên kết.Như vậy đối số đầu tiên này có thể rất đơn giản như ~ x
do ta chỉ có duy nhất một biến độc lập là x, không có biến phụ thuộc và điều kiện ràng buộc. Nhưng đối số ấy có thể phức tạp hơn nhưlog(y) ~ t+u+v | p+q
Bảng dữ liệu được khai báo dưới dạng data = bang_du_lieu
hay đơn giản hơn là bang_du_lieu
.
Các đối số sau thường được dùng để sắp xếp các biểu đồ con trong vùng không gian vẽ:
as.table
: đối số này cho ta biết thứ tụ sắp xếp vào các dòng và cột của ma trận. Khias.table = FALSE
(giá trị mặc định), các biểu đồ con sẽ được sắp xếp từ trái sang phải trong các dòng và từ dưới lên trên trong các cột (như các trục tọa độ thông dụng). Ngược lại, khi as.table = TRUE
, các biểu đồ con sẽ được sắp xếp từ trái sang phải trong các dòng và từ trên xuống dưới trong các cột (như các bảng).layout
: liên quan đến việc phân chia các biểu đồ con. Đối số này là một vectơ thường có 2 thành phần, thành phần thứ nhất cho biết số cột, thành phần thứ hai cho biết số dòng. Nếu thành phần thứ nhất bằng 0 thì thành phần thứ hai là tổng số các ô dùng để chứa biểu đồ con. Khi ấy R sẽ quyết định cách sắp xếp.layout
có thêm thành phần thứ ba cho biết số trang.Mỗi biểu đồ con thường có một vài ô nhỏ để ghi giá trị của biến độc lập hay thông số. Nếu các ô này ở phía trên biểu đồ con thì đối số strip
có giá trị là TRUE
. Nếu các ô này ở bên trái biểu đồ con thì strip = FALSE
và strip.left = TRUE
.
xyplot
Khi ta đã tương đối quen thuộc với việc vẽ bằng các công cụ cơ bản thì việc chuyển sang vẽ bằng các hàm của lattice
cũng không khó khăn gì lắm. Thí dụ ta dùng hàm xyplot
để vẽ biểu đồ xy thể hiện sự phụ thuộc của năng lượng trái cây vào hàm lượng nước tương ứng với các mức của hàm lượng gluxit và protein như trên Hình 1.
Hình 1 Biểu đồ xy vẽ bằng hàm xyplot
của phụ kiện lattice
Biểu đồ này được thực hiện với các câu lệnh sau:
> library("lattice")
> yGluxit <- cut(TC$Gluxit_g, c(0,10,20,100),
c("Gluxit thấp","Gluxit trung bình","Gluxit cao"))
> yProtein <- cut(TC$Protein_g, c(0,1,10), c("Protein thấp", "Protein cao"))
> TC <- cbind(TC, yGluxit, yProtein)
> xyplot(NangLuong_kcal ~ Nuoc_g | yGluxit + yProtein, TC, layout=c(3,2), cex=1.5, col=2
xlab="Hàm lượng nước (%)", ylab="Năng lượng (kcal/100g)")
Dòng thứ nhất của đoạn lệnh trên dùng để kích hoạt phụ kiện lattice
. Với dòng thứ hai và thứ ba, ta tạo thêm hai biến mới kiểu yếu tố (factor) yGluxit và yProtein bằng cách dùng hàm cut
để chia trái cây làm 3 nhóm hay 2 nhóm tùy thuộc vào hàm lượng gluxit hay protein. Dòng tiếp theo ta mở rộng bảng dữ liệu TC bằng hàm cbind
để đưa yGluxit và yProtein thành các biến mới. Cuối cùng ta vẽ các biểu đồ xy với cú pháp và các đối số ta dã xem xét ở phần trên.
bwplot
Với lattice
ta có thể vẽ nhiều biểu đồ hộp với hàm bwplot
. Nhìn chung, cú pháp hàm này cũng tương tự với hàm xyplot
mà ta vừa xem xét. Thí dụ sự phân bố năng lượng của các loại quả tương ứng với các mức khác nhau của gluxit và protein được trình bày ở Hình 2.
Hình 2 Biểu đồ hộp vẽ bằng hàm bwplot
của phụ kiện lattice
Biểu đồ này được thực hiện với các câu lệnh sau:
> library("lattice")
> yGluxit <- cut(TC$Gluxit_g, c(0,10,20,100),
c("Gluxit thấp","Gluxit trung bình","Gluxit cao"))
> yProtein <- cut(TC$Protein_g, c(0,1,10), c("Protein thấp", "Protein cao"))
> TC <- cbind(TC, yGluxit, yProtein)
> bwplot(~ NangLuong_kcal | yProtein + yGluxit, TC, layout=c(2,3),
ylab="Năng lượng (kcal/100g)", cex=1.5, col=2)
barchart
Với barchart
của lattice
ta có thể thực hiện nhiều biểu đồ thanh phức tạp. Thí dụ ta có số liệu về doanh số của ba nhóm bán hàng của một công ty là Nhóm A, Nhóm B và Nhóm C, trong 4 năm từ 2011 đến 2014 (mỗi năm 4 quý) và ta muốn thể hiện các số liệu này qua một đồ thị dạng thanh.
Trước hết ta cần thành lập bảng dữ liệu chứa các thông tin về nhóm, quý, năm và doanh số. Với doanh số ta tạo vectơ dso
bằng cách tổng hợp doanh số của 4 năm với số liệu có sẵn bằng các câu lệnh sau:
> dso_2011<-c(1300,460,940,570,280,350,820,340,540,1040,480,580)
> dso_2012<-c(1520,510,1060,640,320,380,880,370,610,1240,540,650)
> dso_2013<-c(1060,320,760,460,230,310,740,290,480,870,420,510)
> dso_2014<-c(1270,450,910,550,260,330,780,320,510,1010,460,550)
> dso <- c(dso_2011,dso_2012,dso_2013,dso_2014)
Ta tạo thêm các vectơ chỉ năm, quý, nhóm bằng các câu lệnh sau:
> nam <- c(rep(2011,12),rep(2012,12),rep(2013,12),rep(2014,12))
> ynam <- as.factor(nam)
> quy_n <- c(rep("Quý 1",3), rep("Quý 2",3), rep("Quý 3",3), rep("Quý 4",3))
> quy <- rep(quy_n,4)
> nh <- c("Nhóm A","Nhóm B","Nhóm C")
> nhom <- rep(nh,16)
Ta lập bảng dữ liệu DoanhSo
dựa trên các vectơ này bằng câu lệnh:
> DoanhSo <- data.frame(nam,quy,nhom,dso,ynam)
Và ta dùng hàm barchart
để vẽ các biểu đồ thanh:
> library(lattice)
> barchart(dso ~ nhom | quy+ynam, DoanhSo, layout=c(4,4), ylab="Doanh Số (triệu đồng)")
Trong các câu lệnh trên, ta đã đưa thêm biến ynam
kiểu yếu tố, và sử dụng biến này để vẽ thay cho nam
để việc trình bày các năm trên biểu đồ được rõ ràng hơn như trên Hình 3.
Hình 3 Biểu đồ thanh vẽ bằng hàm barchart
của phụ kiện lattice
histogram
Khi ta muốn trình bày ảnh hưởng của một số biến đến sự phân bố của một biến nào đó, ta có thể dùng hàm histogram
. Thí dụ ta muốn xem xét ảnh hưởng của hàm lượng gluxit và protein của trái cây ảnh hưởng đến sự phân bố của năng lượng như thế nào, ta có thể sử dụng câu lệnh sau:
> histogram(~ NangLuong_kcal | yGluxit+yProtein, TC, layout=c(3,2),
type="density", xlab="Năng lượng (kcal/100g)")
Kết quả được thể hiện trên Hình 4.
Hình 4 Biểu đồ tần số vẽ bằng hàm histogram
của phụ kiện lattice
Khi vẽ biểu đồ tần số bằng công cụ cơ bản, trục tung được xác lập bằng đối số freq
. Tuy nhiên ở đây, trục tung của biểu đồ lại được xác lập bằng đối số type
. Các giá trị của đối số này là:
"count"
: số phần tử,"percent"
: tỷ lệ phần trăm (so với nhóm) ; đây cũng là giá trị mặc định,"density"
: mật độ.Trang web này được cập nhật lần cuối ngày 25/11/2018
R
Các chuyên đề
Xử lý dữ liệu
Ma trận
R