logo xDuLieu.com

Trang trướcVẽ nhiều biểu đồ với phụ kiện latticeTrang sau

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.

Khái quát về 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à:

  • Các hàm vẽ trong 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.
  • Do đó, tất cả các đối số cần thiết đều được đưa vào hàm vẽ. Điều này làm các dòng lệnh trở nên dài hơn, phức tạp hơn
  • Kết quả của lệnh vẽ là một đối tượng thuộc lớp 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.
  • Dữ liệu dùng để vẽ thông thường thuộc kiểu bảng (data frame)

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


Các đối số trong 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 đồ.

Biến và dữ liệ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 đồ.
  • toán tử | để 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
  • Ta có thể có một số biến trong cùng một loại. Khi đó, ta dùng dấu + 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.


Sắp xếp các biểu đồ con

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. Khi
    as.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.
    Nếu số biểu đồ con quá nhiều, cần tách vùng không gian vẽ thành một số "trang", thì layout có thêm thành phần thứ ba cho biết số trang.

Vị trí đặt tên

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 = FALSEstrip.left = TRUE.


Vẽ biểu đồ xy với 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.


Vẽ biểu đồ hộp với 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)

Vẽ biểu đồ thanh với 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


Vẽ biểu đồ tần số với 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 trướcVề đầu chươngTrang sau


Trang web này được cập nhật lần cuối ngày 25/11/2018

R