logo xDuLieu.com

Trang trướcCác hàm vẽ bổ sungTrang sau

Sau khi thực hiện hàm vẽ chính, ta có thể thêm các chi tiết cho biểu đồ bằng các hàm vẽ bổ sung. Khi thực hiện một hàm thuộc loại này, biểu đồ hiện hành không bị xóa đi. Trong phần này, ta sẽ xem xét một số hàm vẽ bổ sung thông dụng.

Thêm điểm với hàm points

 

Hàm points được dùng để vẽ một hay nhiều điểm lên một biểu đồ đã có sẵn. Đối số bắt buộc của hàm này có thể là là hoành độ x và tung độ y của điểm cần vẽ (points(x, y)); có thể là hai vectơ vectx và vecty có cùng cỡ, chứa các hoành độ x và các tung độ y (points(vectx, vecty)); có thể là một ma trận hay bảng có hai cột, có kiểu dữ liệu số (points(mtrxy) hay points(bngxy)).

Minh họa cho hàm này được trình bày tại Hình 2 bên dưới và đoạn lệnh tương ứng.


Vẽ thêm đoạn thẳng

 

Để vẽ thêm đoạn thẳng ta có thể sử dụng hàm lines hoặc abline

+ lines : Hàm này vẽ một hay một số đoạn thẳng đi qua các điểm. Tọa độ các điểm được đưa vào trong đối số bắt buộc giống như hàm points

+ abline : Hàm này có một số dạng sau:

  • abline(a, b) : vẽ đường thẳng có phương trình y = a + bx.
  • abline(h = y) : vẽ đường thẳng nằm ngang cách trục hoành y đơn vị.
  • abline(v = x) : vẽ đường thẳng đứng cách trục tung x đơn vị.

Các trường hợp trên được minh họa qua đoạn lệnh sau và Hình 1.

> plot(x=0:10, y=0:10, type="n", xlab="x", ylab="y")
> par(lwd = 2)
> abline(2,1, col=2)
> abline(v=4, col=3)
> abline(h=6, col=4)

Hình 1 Các đường thẳng vẽ bằng hàm abline

Trong đoạn lệnh trên, câu lệnh thứ nhất dùng để vẽ một biểu đồ trống với đối số type = "n"; câu thứ hai xác lập chiều dầy nét vẽ cho tất cả các đường bằng đối số lwd có hiệu lực toàn cục; ba câu lệnh tiếp theo vẽ ba đường thẳng ứng với ba trường hợp của hàm abline.

Hàm này còn được dùng để vẽ đường thẳng hồi quy như ta sẽ xem xét sau.


Viết chữ với text

 

Đôi khi để biểu đồ dễ được nắm bắt tiếp thu hơn, ta cần ghi chú thích trực tiếp lên biểu đồ. Điều đó được thực hiện thông qua hàm text. Cú pháp thông dụng của hàm này là:

text(x, y, labels)

Trong đó :

  • xy là tọa độ của điểm lấy làm chuẩn của câu ghi chú. Tọa độ này có một số cách thể hiện như ta đã xem xét ở các hàm pointslines.
  • labels là nội dung ghi chú. Nếu ta có một số ghi chú tại một số vị trí thì labels là một vectơ có kiểu chữ. Nếu ta chỉ có một ghi chú thì ta chỉ cần ghi nội dung ghi chú, không cần ghi labels.

Một đối số khác của hàm này ta cũng nên lưu ý là pos. Khi đối số này có giá trị mặc định, điểm chuẩn nằm ở tâm của câu ghi chú. Các trường hợp khác thì:

  • pos = 1 : câu ghi chú ở dưới điểm chuẩn,
  • pos = 2 : câu ghi chú bên trái điểm chuẩn,
  • pos = 3 : câu ghi chú ở trên điểm chuẩn,
  • pos = 4 : câu ghi chú bên phải điểm chuẩn,

Đoạn lệnh sau và Hình 2 được dùng để minh họa cho các điểm trên.

> plot(x=0:10, y=0:10, type="n", xlab="x", ylab="y")
> points(c(5,2,2,8,8), c(5,2,8,8,2), pch=c(3,15,15,15,15), col=c(1,2,4,2,4), cex=2)
> par(cex = 1.2)
> text(5,5, "Trung tâm", col=3)
> text(2,2, "Phía trên", pos=3, col=2, font=2)
> text(2,8, "Bên phải", pos=4, col=4, font=4)
> text(8,8, "Phía dưới", pos=1, col=2, font=2)
> text(8,2, "Bên trái", pos=2, col=4, font=4)

Hình 2 Ghi chú trên biểu đồ bằng hàm text

Khi viết chữ trên các lề của biểu đồ, ta dùng hàm mtext thay cho text. Cú pháp của hai hàm này gần tương tự nhau.


Vẽ đa giác với polygon

 

Hàm polygon được dùng để vẽ đa giác có phần bên trong được trang trí bằng những gạch nghiêng hay tô màu. Cú pháp chung của hàm này như sau:

polygon(x, y, density, angle, border, col, lty)

Các đối số này có ý nghĩa như sau:

  • x, y : các vectơ chứa tọa độ các đỉnh của đa giác,
  • density : mật độ của các đường gạch, đơn vị là số đường trên một inch. Giá trị mặc định của đối số này là NULL nghĩa là không vẽ đường nghiêng. Nếu giá trị này là 0, không vẽ đường nghiêng cũng không tô màu. Nếu giá trị này âm, không vẽ đường nghiêng mà tô màu.
  • angle : góc của đường nghiêng so với đường thẳng nằm ngang, đơn vị là độ, chiều dương ngược chiều kim đồng hồ. Giá trị mặc định của angle là 45.
  • border : màu của các cạnh đa giác. Giá trị mặc định là giá trị được xác lập từ hàm par với đối số fg (và mặc định của đối số này là màu đen (black)). Nếu đặt border = NA thì không vẽ cạnh đa giác
  • col : giá trị mặc định của đối số này là NA nghĩa là không tô màu đa giác. Tuy nhiên sự thể hiện giá trị của đối số này còn tùy thuộc vào giá trị của density. Nếu ở chế độ tô màu, col xác lập màu tô. Nếu ở chế độ vẽ đường nghiêng, col xác lập màu của đường nghiêng.
  • lty : loại đường dùng để vẽ các đoạn thẳng.

Các điểm trên được minh họa qua đoạn lệnh sau và Hình 3

> par(mar = c(2,2,2,2))
> plot(x=0:10, y=0:10, type="n", xlab="", ylab="")
> polygon(c(1.2,2,2.8), c(7.5,9,7.5), density=10, col=2, border=4)
> polygon(c(7,7,9,9), c(7,9,9,7), density=10, angle=135, lty=4, col=4, border=2)
> par(lwd=3)
> polygon(c(7.5,7.1,8,8.9,8.5), c(1.2,2.1,3,2.1,1.2), density=-1, col=5, border=2)
> polygon(c(1.5,1,1.5,2.5,3,2.5), c(1.2,2,2.8,2.8,2,1.2), density=-1, col=7, border=4)
> polygon(c(4,5,6,3.3,6.7), c(2.4,7.2,2.4,5.5,5.5), density=-1, col=3, border=NA)

Hình 3 Minh họa các đối số của hàm polygon


Dùng legend để ghi chú thích

 

Trong các biểu đồ thể hiện nhiều đường biểu diễn, nhiều nhóm dữ liệu, các chú thích sẽ làm người sử dụng phân biệt được sự khác biệt của chúng. Ta có thể thực hiện được việc này với hàm legend. Hàm này có gần 40 đối số khác nhau, chi tiết của chúng có thể được tìm thấy tại trang web "Add Legends to Plot". Các đối số thông dụng hơn cả được trình bày sau đây :

  • Vị trí đặt chú thích : có thể được trình bày dưới dạng tọa độ với hai số x và y hay bằng một từ thuộc nhóm sau:"bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right""center".
  • Nội dung chú thích là một vectơ, mỗi thành phần là một cụm từ.
  • Định dạng cho các từ trong chú thích như text.font, text.col.
  • Định dạng cho các hình trong chú thích như pch, lty.
  • Định dạng cho khung chứa chú thích như box.lty, bg.

Thí dụ sau (Hình 4) thể hiện kết quả thí nghiệm khảo sát ảnh hưởng của hai phương pháp bảo quản xoài đến hàm lượng vitamin C trong quá trình bảo quản.

> ThoiGian <- seq(0,20,4)
> vitC_A <- c(42,37,32,28,24,19)
> vitC_B <- c(42,35,28,22,16,11)
> vitC_DC <- c(42,36,31,25,19,14)
> par(mar = c(4,4,2,2))
> plot(ThoiGian, vitC_A, type="o", lwd=2, col=3, xlim=c(0,20), ylim=c(10,45),
font.lab=3, xlab="Thời gian (ngày)", ylab="Hàm lượng vitamin C (mg/100g,)")
> lines(ThoiGian, vitC_B, type="o", lwd=2, col=2)
> lines(ThoiGian, vitC_DC, lty=4, col=4, lwd=2)
> legend("topright", c("Phương pháp A", "Phương pháp B", "Đối chứng"),
lty=c(1,1,4), pch=c(1,1,27), col=c(3,2,4), lwd=2)

Hình 4 Chú thích cho biểu đồ bằng hàm legend


axis và trục tọa độ

 

Khi vẽ, R sẽ tự động thêm các trục, phân độ các trục, thêm các chi tiết khác có liên quan đến trục. Trong một số trường hợp, sự trình bày các trục như vậy không phù hợp với ý định của chúng ta. Khi ấy ta sẽ dùng hàm axis để vẽ lại các trục theo ý định của mình. Để làm được điều này, đầu tiên ta phải vô hiệu hóa cách vẽ trục tự động của R trong hàm vẽ chính bằng các cách sau:

  • Đặt đối số axes = FALSE. Khi đó, không có trục nào được vẽ
  • Nếu ta chỉ muốn vẽ lại trục y (hay x), ta đặt đối số yaxt = "n" (hay xaxt = "n").

Hàm axis cũng có khá nhiều đối số, bạn có thể tham khảo thêm tại trang web "Add an Axis to a Plot". Trong phần này ta chỉ xét một số đối số đặc trưng và phổ biến.

  • side : là một số nguyên cho biết vị trí đặt trục. 1 là bên dưới, 2 là bên trái, 3 là phía trên, 4 là bên trái.
  • at : cho biết trình bày sự phân độ theo các giá trị nào.
  • labels : là một vectơ cho biết các từ tại vị trí phân độ.
  • las : cho biết phương của các từ dùng phân độ. 0 là song song với trục (giá trị mặc định), 1 là nằm ngang, 2 là vuông góc với trục, 3 là thẳng đứng.
  • tck : là chiều dài tương đối của đoạn phân độ so với kích thước biểu đồ. Nếu giá trị này âm, đoạn phân độ ở phía ngoài biểu đồ. Nếu giá trị này là 1, vẽ đường mạng lưới trên biểu đồ. Giá trị mặc định của tck là -0,01.

Để hỗ trợ thêm cho việc trình bày các trục, ta có thể sử dụng hàm mtext

Thí dụ sau và Hình 5 minh họa cho việc xác lập lại các trục

> x <- seq(0,10,2)
> x1 <- c(1,2,3,5,7,10)
> y <- 0.5*x + 3
> z <- 10/x1
> par(mar=c(4,4,2,5))
> plot(x, y, type="o", yaxt="n", xlim = c(0,10), ylim=c(0,10), col=2, lwd=2, xlab="x")
> lines(x1, z, type="o", col=4, lwd=2) > axis(2, at=x, las=2, col=2)
> axis(4, at=z, labels=round(z, digits=2), las=2, col=4)
> mtext("z=10/x", side=4, line=3)

Hình 5 Xác lập lại trục bằng hàm axis




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