Menu

Hàm plot() trong R: kiểu biểu đồ, màu sắc, pch và chú giải

Cách hàm plot() của R hoạt động: các kiểu biểu đồ, tiêu đề và nhãn trục, màu sắc, ký hiệu điểm (pch), vẽ chồng bằng lines() và abline(), và chú giải.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

plot() là hàm vẽ biểu đồ đa năng của R

Để vẽ biểu đồ trong R, hãy gọi plot(x, y) với hai vector số có cùng độ dài. R vẽ một điểm cho mỗi cặp giá trị, vector thứ nhất theo trục ngang, vector thứ hai theo trục dọc, và tự động đặt nhãn trục bằng tên biến:

x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)

plot(x, y)

Kết quả là mười hai hình tròn rỗng rải rác, tăng dần đều khi x lớn lên. Chỉ cần vậy thôi: không cần cài package, không cần thiết lập gì. plot() có sẵn trong base R và là hàm đứng sau hầu hết các biểu đồ khám phá dữ liệu nhanh.

Vì trình chạy code trên trang này chỉ hiển thị đầu ra dạng văn bản, các lệnh vẽ trong bài viết này là những đoạn code tĩnh; hãy dán chúng vào RStudio hoặc bất kỳ phiên R nào trên máy để xem hình. Thứ bạn có thể chạy ở đây là phần chuẩn bị dữ liệu. Dù sao đó cũng là một thói quen tốt: hãy xem các con số trước khi vẽ chúng.

Nếu chỉ truyền một vector, plot(y) dùng các vị trí chỉ số 1, 2, 3, ... làm trục ngang, rất tiện để xem nhanh một chuỗi số đo.

Chọn kiểu biểu đồ

Đối số type quyết định cách vẽ các cặp giá trị:

plot(x, y, type = "p")   # points (the default)
plot(x, y, type = "l")   # a connected line
plot(x, y, type = "b")   # both: points joined by line segments
plot(x, y, type = "h")   # vertical bars from zero, like a spike chart
plot(x, y, type = "s")   # a step function

type = "l" biến biểu đồ điểm thành biểu đồ đường, đúng thứ bạn cần cho mọi thứ được đo theo thời gian. type = "b" vẫn giữ từng quan sát hiển thị rõ trong khi vẫn cho thấy xu hướng. type = "h" vẽ một đoạn thẳng đứng mảnh từ 0 lên tới mỗi giá trị, còn type = "s" vẽ một bậc thang giữ nguyên mỗi giá trị cho đến giá trị tiếp theo, hữu ích cho các đại lượng thay đổi theo từng bước nhảy, như giá cả hay số lượng tồn kho.

Tiêu đề, nhãn và màu sắc

Một biểu đồ không có nhãn chỉ là ghi chú riêng cho chính bạn. Ba đối số giải quyết điều đó: main cho tiêu đề, xlab và ylab cho nhãn trục. col đặt màu:

plot(x, y,
     type = "b",
     main = "Monthly signups",
     xlab = "Month",
     ylab = "Signups (thousands)",
     col  = "steelblue")

col nhận ba loại giá trị:

  • Tên màu: "red", "steelblue", "tomato", "darkgreen". R biết 657 tên màu; chạy colors() để liệt kê tất cả.
  • Mã hex: col = "#2C7FB8", giống hệt như trong CSS.
  • Một vector màu: mỗi điểm một màu, đó là cách tô màu điểm theo nhóm: col = c("tomato", "steelblue")[group] trong đó group là một factor.

Ký hiệu điểm với pch, kích thước với cex và lwd

Hình tròn rỗng mặc định ổn khi khám phá dữ liệu nhưng trông nhòe nhoẹt trong bất cứ thứ gì bạn cho người khác xem. pch (plotting character) chọn ký hiệu, đánh số từ 0 đến 25:

plot(x, y, pch = 19)                     # solid circle - the usual choice
plot(x, y, pch = 17)                     # solid triangle
plot(x, y, pch = 21, col = "black",
     bg = "gold")                        # fillable circle: border + fill

Có hai con số đáng ghi nhớ. pch = 19 là hình tròn đặc mà hầu hết biểu đồ hoàn chỉnh đều dùng. pch = 21 đến 25 là các ký hiệu tô được: col tô màu viền và bg tô màu bên trong, nên bạn có những điểm hai màu.

Kích thước và kiểu đường có các núm điều chỉnh riêng:

  • cex thay đổi kích thước điểm: cex = 1.5 làm điểm to gấp rưỡi.
  • lwd đặt độ dày đường cho type = "l" hoặc "b": lwd = 2 là một đường đậm, dễ đọc.
  • lty đặt kiểu nét đường: lty = 1 nét liền, 2 nét đứt, 3 nét chấm.

Vẽ chồng: points(), lines() và abline()

plot() bắt đầu một biểu đồ mới. Để vẽ chồng lên một biểu đồ đã có, hãy dùng các hàm đi kèm: chúng thêm vào biểu đồ hiện tại thay vì thay thế nó:

plot(x, y, type = "l", lwd = 2, col = "steelblue",
     main = "Actual vs. target")

points(x, y, pch = 19, col = "steelblue")   # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40")  # add a second series, dashed
abline(h = 10, col = "tomato")              # horizontal reference line at y = 10

abline() là công cụ vẽ đường tham chiếu và có ba chế độ:

  • abline(h = 10): một đường nằm ngang tại một giá trị trên trục dọc.
  • abline(v = 6): một đường thẳng đứng tại một giá trị trên trục ngang.
  • abline(a = 0, b = 1.5): một đường thẳng theo hệ số chặn a và hệ số góc b.

Mẹo hay nhất của nó: truyền vào một mô hình đã khớp và nó sẽ vẽ đường hồi quy cho bạn, abline(lm(y ~ x)). Chỉ một dòng đó biến biểu đồ điểm thành một lập luận; hướng dẫn biểu đồ phân tán phát triển tiếp từ đây.

Một quy tắc cần tuân thủ: giới hạn trục được cố định bởi lệnh plot() đầu tiên. Nếu một chuỗi dữ liệu vẽ chồng vượt ra ngoài giới hạn đó, nó sẽ bị cắt; hãy đặt xlim = và ylim = trong lệnh plot() ban đầu đủ rộng cho mọi thứ bạn định thêm vào.

Thêm chú giải

Khi một biểu đồ có nhiều hơn một chuỗi dữ liệu, nó cần chú giải (legend). legend() nhận một từ khóa vị trí làm đối số đầu tiên, "topright", "topleft", "bottomright", "bottomleft", "top", "bottom" hoặc "center" (đây là các chuỗi R nguyên văn, nên giữ nguyên tiếng Anh trong code), rồi đến các nhãn và kiểu tương ứng:

legend("topright",
       legend = c("Actual", "Target"),
       col    = c("steelblue", "gray40"),
       lty    = c(1, 2),
       pch    = c(19, NA),
       lwd    = 2)

Các vector col, lty và pch phải khớp với legend theo từng mục: nhãn đầu tiên nhận màu đầu tiên, và cứ thế. Dùng NA cho kiểu không áp dụng với một chuỗi (ở đây, đường mục tiêu không có điểm). Từ khóa ghim hộp chú giải vào một góc của vùng vẽ; hãy chọn góc nào dữ liệu của bạn để trống.

Nhiều khung hình và lưu ra tệp

Để hiển thị nhiều biểu đồ trong một hình, hãy đặt lưới vẽ trước khi vẽ: par(mfrow = c(1, 2)) chia thiết bị thành một hàng hai cột, và hai lệnh plot() tiếp theo lần lượt lấp đầy các khung. Đặt lại bằng par(mfrow = c(1, 1)) khi xong, nếu không các biểu đồ sau sẽ vẫn bé tí.

Lưu ra tệp hoạt động bằng cách chuyển hướng việc vẽ sang một thiết bị tệp thay vì màn hình:

png("signups.png", width = 800, height = 600)

plot(x, y, type = "b", pch = 19, col = "steelblue",
     main = "Monthly signups", xlab = "Month", ylab = "Signups")

dev.off()

Mọi thứ giữa png() và dev.off() đều được ghi vào tệp; không có gì hiện lên màn hình. Quên dev.off() là bug kinh điển: tệp bị khóa và trống cho đến khi bạn đóng thiết bị. pdf(), jpeg() và svg() hoạt động theo cùng cách.

Những điều cần nhớ

  • plot(x, y) vẽ ngay lập tức; type = chuyển giữa điểm ("p"), đường ("l") và cả hai ("b").
  • main, xlab, ylab đặt nhãn cho biểu đồ; col nhận tên màu (657 tên trong colors()) hoặc mã hex.
  • pch = 19 là hình tròn đặc; từ pch = 21 đến 25 tách màu viền (col) và màu tô (bg); cex, lwd, lty điều chỉnh kích thước và kiểu đường.
  • points(), lines() và abline() vẽ chồng lên biểu đồ đã có; abline(lm(y ~ x)) thêm đường hồi quy chỉ trong một lệnh.
  • legend("topright", ...) đặt nhãn cho các chuỗi dữ liệu; png(...) + dev.off() lưu ra tệp.

Tiếp theo: biểu đồ histogram, biểu đồ một biến mà bạn sẽ dùng đầu tiên khi gặp một bộ dữ liệu mới.

Câu hỏi thường gặp

Làm sao để vẽ biểu đồ trong R?

Gọi plot(x, y) với hai vector số có cùng độ dài. R mở một cửa sổ đồ họa và vẽ một điểm cho mỗi cặp giá trị. Thêm type = "l" để có biểu đồ đường, main, xlab và ylab để đặt tiêu đề, và col để chọn màu.

pch trong R nghĩa là gì?

pch (plotting character) chọn ký hiệu cho điểm, đánh số từ 0 đến 25. pch = 19 là hình tròn đặc mà hầu hết mọi người muốn dùng. Các ký hiệu từ 21 đến 25 có phần tô riêng: col đặt màu viền và bg đặt màu bên trong.

Làm sao để thêm chú giải vào biểu đồ trong R?

Gọi legend() sau khi vẽ, với từ khóa vị trí như "topright" làm đối số đầu tiên, một vector nhãn legend =, cùng các giá trị col, pch hoặc lty tương ứng mà bạn đã dùng trong biểu đồ.

Làm sao để lưu biểu đồ R ra tệp?

Mở một thiết bị tệp trước khi vẽ và đóng nó sau khi vẽ xong: png("myplot.png", width = 800, height = 600), rồi đến code vẽ biểu đồ, rồi dev.off(). Không có gì hiện lên màn hình: biểu đồ được ghi thẳng vào tệp.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu