Trong các phần trước ta đã biết cách vẽ một số loại biểu đồ, mỗi biểu đồ chiếm một vùng không gian nhất định của màn hình hay trang giấy. Trong phần này, ta khảo sát một số phương pháp vẽ nhiều biểu đồ trong cùng một vùng không gian.
plot
Trong đa số trường hợp, lệnh plot sẽ vẽ một biểu đồ xy. Tuy nhiên nếu ta khai báo dữ liệu là một bảng có n biến, ta thu được một "ma trận" các biểu đồ có n dòng, n cột, và n(n-1) biểu đồ xy thể hiện mối quan hệ của tất cả các cặp biến. Thí dụ như trong đoạn lệnh sau và Hình 1.
> TC <- TraiCay[,c(2,3,4,5,6,8)]
> plot(TC)
Hình 1 Ma trận các biểu đồ vẽ bằng hàm plot
Trong đoạn lệnh trên và Hình 1, TC là một bảng thu được từ bảng dữ liệu TraiCay với 7 biến: tên của trái cây, hàm lượng nước, năng lượng, hàm lượng protein, nước, lipit và gluxit.
Trong ma trận trên Hình 1, một biểu dồ, thí dụ ở dòng 3 cột 2, có trục hoành là biến ở cột 2 (Nuoc_g) và trục tung là biến ở dòng 3 (NangLuong_kcal).
Trong một số trường hợp, ta chỉ muốn vẽ một số biểu đồ liên quan đến các biến mà ta quan tâm chứ không phải tất cả các biểu đồ như trong trường hợp trên. Khi ấy ta dùng cú pháp plot(~ bien)
, trong đó bien
là danh sách các biến mà ta quan tâm. Câu lệnh sau và Hinh 2 minh họa cho điểm này.
> plot(~ Nuoc_g + NangLuong_kcal + Gluxit_g, data=TC)
Hình 2 Ma trận các biểu đồ vẽ bằng hàm plot
Ghi chú : trong câu lệnh trên, cụm từ "data=" được đưa vào để làm cho câu lệnh rõ ràng hơn. Ta có thể bỏ cụm từ này đi mà không bị ảnh hưởng gì. Nghĩa là câu lệnh sau cũng thu được Hình 2:
> plot(~ Nuoc_g + NangLuong_kcal + Gluxit_g, TC)
pairs
Các kết quả trên có thể đạt được khi ta dùng lệnh pairs với các cú pháp gần như tương tự. Thí dụ Hình 1 và 2 có thể thu được bằng các lệnh sau:
> pairs(TC)
và :
> pairs(~ Nuoc_g + NangLuong_kcal + Gluxit_g, TC)
mfrow
và mfcol
Trong hai trường hợp trên, khi ta sử dụng các hàm plot
và pairs
, thi các biểu đồ con đều thuộc loại biểu đồ xy và có cùng một nguồn dữ liệu. Nếu ta muốn các biểu đồ con có các loại khác nhau và từ những nguồn dữ liệu khác nhau, ta có thể sử dụng ma trận biểu đồ được xây dựng từ các đối số mfrow
hay mfcol
của hàm par
.
Các đối số này đều là các vectơ có hai phần tử, phần tử thứ nhất cho biết số dòng, phần tử thứ hai cho biết số cột của ma trận biểu đồ. Sự khác biệt giữa hai vectơ này là sự sắp xếp các biểu đồ con theo thứ tự dòng hay cột.
Thí dụ với mfrow = c(3, 4)
thì bốn biểu đồ con đầu tiên sẽ được xếp vào dòng thứ nhất, bốn biểu đồ con kế tiếp được xếp vào dòng thứ hai, . . ..
Các điểm trên được minh họa qua đoạn lệnh sau và Hinh 3.
> par(mfrow=c(2,3), mar=c(2,2,4,2))
> plot(NangLuong_kcal ~ Nuoc_g, TC, main="Hàm lượng nước & Năng lượng")
> barplot(TC$Protein_g, main="Hàm lượng Protein các loại quả")
> hist(TC$LipitTong_g, main="Hàm lượng Lipit các loại quả")
> boxplot(TC$Gluxit_g, main="Hàm lượng Gluxit các loại quả")
> plot.new()
> xx <- mean(TC$Protein_g)
> yy <- mean(TC$LipitTong_g)
> zz <- mean(TC$Gluxit_g)
> pie(c(xx,yy,zz), c("Protein","Lipit","Gluxit"), main="Nguyên tố đa lượng của quả")
Hình 3 Ma trận các biểu đồ vẽ bằng hàm plot
Trong đoạn lệnh trên, dòng lệnh thứ nhất xác lập các thông số của ma trận biểu đồ và chừa lề. Các dòng lệnh sau dùng để vẽ lần lượt 6 biểu đồ và đặt dần vào ma trận biểu đồ. Đặc biệt biểu đồ thứ năm là biểu đồ trống, vẽ bằng hàm plot.new()
.
layout
Trong các phần trên, ta đã chia vùng không gian vẽ thành một ma trận gồm các biểu đồ có kích thước giống nhau. Nếu ta muốn các biểu đồ con có kích thước khác nhau, ta có thể dùng hàm layout
. Dạng cơ bản của hàm này là:
layout(ma_tran_sap_xep)
Trong đó ma trận sắp xếp dùng để thể hiện sự sắp xếp các biểu đồ con vào vùng không gian vẽ. Ta có thể sử dụng cú pháp sau để tạo lập ma trận sắp xếp:
matrix(vec_sap_xep, so_dong, so_cot, byrow)
Ta sẽ minh họa cú pháp này bằng thí dụ trên Hình 4. Ta xem như vùng không gian vẽ sẽ được chia thành 9 ô với 3 dòng và 3 cột và ta xếp 5 biểu đồ vào vùng không gian này. Biểu đồ thứ nhất chiếm 4 ô ở góc dưới bên trái, biểu đồ thứ hai chiếm ô phía trên bên trái, biểu đồ thứ ba chiếm ô giữa phía trên, biểu đồ thứ tư chiếm ô giữa bên phải và biểu đồ thứ năm chiếm ô dưới bên phải. Ô trên cùng bên phải để trống.
Hình 4 Sắp xếp 5 biểu đồ vào vùng không gian vẽ
Do đó :
byrow
: ta dự định sẽ sắp xếp lần lượt theo dòng, nên byrow = TRUE
so_dong
và so_cot
: như vừa mô tả ở trên, ta chia vùng không gian vẽ làm 3 "dòng" và 3 "cột" nên so_dong = 3
và so_cot = 3
.vec_sap_xep
: là một vectơ cho biết tên các biểu đồ tại các vị trí của vùng không gian vẽ. Do vùng không gian vẽ có 3 dòng và 3 cột nên vectơ này có 9 thành phần. Theo sự sắp xếp ở trên thì:vec_sap_xep = c(2, 3, 0, 1, 1, 4, 1, 1, 5)
Vậy câu lệnh để phân chia vùng không gian vẽ sẽ là:
> layout(matrix(c(2,3,0,1,1,4,1,1,5), 3, 3, byrow=TRUE))
Với câu lệnh này, ta thu được 9 ô có kích thước như nhau. Nếu ta muốn chiều rộng hay chiều cao các ô khác nhau, ta sử dụng các đối số widths
và heights
. Đó là các vectơ có số thành phần bằng số cột hay số dòng, giá trị các thành phần bằng kích thước tương đối của cột hay dòng tương ứng. Thí dụ để có sự phân chia như Hình 4, ta sử dụng câu lệnh:
> layout(matrix(c(2,3,0,1,1,4,1,1,5), 3, 3, byrow=TRUE),
widths=c(3,4,5), heights=c(4,3,5))
Trong phần này, chúng ta sẽ khảo sát sự phối hợp các loại biểu đồ, trong có có một biểu đồ chính, các biểu đồ còn lại dùng để hỗ trợ, cung cấp thêm các thông tin cho một vài đối tượng trong biểu đồ chính. Ta lấy thí dụ như Hình 5, phần chính là biểu đồ xy diễn tả mối tương quan giữa hàm lượng gluxit và năng lượng của trái cây. Bên cạnh đó ta có các biểu đồ hộp để diễn tả sự phân phối của hàm lượng gluxit và năng lượng của các loại trái cây.
Hình 5 Phối hợp biểu đồ xy và biểu đồ hộp
Để vẽ Hình 5, chúng ta đã sử dụng bảng dữ liệu TC và đoạn lệnh sau:
> nglg <- TC$NangLuong_kcal
> glu <- TC$Gluxit_g
> layout(matrix(c(2,0,1,3),2,2,byrow=T), widths=c(3,1), heights=c(1,3)) > par(mar=c(4,4,1,1))
> plot(glu, nglg, xlim=c(0,70), ylim=c(0,250), las=1, col=2, cex=1.5,
xlab="Hàm lượng Gluxit (%)", ylab="Năng lượng (kcal/100g)", > par(mar=c(0,3,1,1), lwd=2)
> boxplot(glu, horizontal=T, axes=F, frame.plot=F, ylim=c(0,70), border=4)
> par(mar=c(3,0,1,1))
> boxplot(nglg, axes=F, ylim=c(0,250), border=3)
Để cho hai biểu đồ hộp ở các vị trí phù hợp so với biểu đồ chính, ta phải sử dụng đối số mar
và hàm par
để xác lập lề cho từng biểu đồ 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