Sự khác biệt giữa facet_wrap () và facet_grid () trong ggplot2 là gì?


80

Tôi đã đọc ggplot2tài liệu cho cả hai chức năng. Tôi đã tự hỏi sự khác biệt là gì và tình huống phù hợp để sử dụng mỗi chức năng ( facet_wrap()facet_grid()).

library(ggplot2)

p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)

p + facet_grid(~ cyl)

Tôi cung cấp ví dụ nhỏ này để làm điểm khởi đầu. Sự khác biệt dường như được bao bọc làm cho các âm mưu tự trị hơn và lưới làm cho một âm mưu lại với nhau.

Câu trả lời:


60

Câu trả lời dưới đây đề cập đến trường hợp bạn có 2 đối số trong facet_grid()hoặc facet_wrap().

facet_grid(x ~ y)sẽ hiển thị x*ycác ô ngay cả khi một số ô trống. Ví dụ:

library(ggplot2)
g <- ggplot(mpg, aes(displ, hwy))

Có 4 cyl riêng biệt và 7 giá trị phân lớp riêng biệt.

g + geom_point(alpha=1/3) + facet_grid(cyl~class)

Hiển thị trên 4 * 7 = 28 lô, ngay cả khi một số là rỗng (vì một số lớp không có tương ứng với giá trị xi lanh, giống như hàng với class = "vừa" không có bất kỳ cyl tương ứng = "5" giá trị) facet_wrap(x ~ y)mặt khác tay, chỉ hiển thị các ô có giá trị thực tế.

g + geom_point(alpha=1/3) + facet_wrap(cyl~class)

Hiện có 19 ô được hiển thị, một ô cho mọi sự kết hợp giữa cyl và class.


25

facet_wrap(...)chuỗi với nhau ggplotstrong các khung (khía cạnh) khác nhau dựa trên một biến duy nhất. facet_grid(...)có thể nhận hai biến:

p + facet_grid(cyl~class)

Bạn cũng có thể sử dụng biến thứ ba để nhóm theo từng khía cạnh:

qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)

cho thấy sự cải thiện (hoặc thiếu) trong quãng đường đi được so với mức dịch chuyển của # xe và lớp.


11
facet_wrapcũng có thể nhận hai biến.
marbel

9

Đối với các ô biến đơn, bạn có thể sử dụng facet_grid()hoặc facet_wrap().

facet_wrap(~variable)sẽ trả về một ma trận đối xứng của các ô cho số cấp độ variable.

facet_grid(.~variable)sẽ trả về các khía cạnh bằng với các mức được variablephân phối theo chiều ngang.

facet_grid(variable~.)sẽ trả về các khía cạnh bằng với các mức được variablephân phối theo chiều dọc.


1
Bạn có biết tại sao nó được facet_wrap(~variable)và không facet_wrap(variable~)?
amsquareb

9

Trích dẫn chủ yếu từ sách ggplot2, tr. 148f.

Có ba loại khía cạnh:

  • facet_null() : một âm mưu duy nhất, mặc định.
  • facet_wrap() : "quấn" dải bảng 1d thành 2d.
  • facet_grid() : tạo ra một lưới 2d gồm các bảng được xác định bởi các biến tạo thành các hàng và cột.

nhập mô tả hình ảnh ở đây

Bọc khía

facet_wrap()tạo một dải bảng dài (được tạo bởi bất kỳ số lượng biến nào) và gói nó thành 2d. Điều này rất hữu ích nếu bạn có một biến duy nhất với nhiều cấp độ và muốn sắp xếp các ô theo cách hiệu quả hơn về không gian.

Bạn có thể kiểm soát cách các băng được quấn thành một mạng lưới với ncol, nrow, as.tabledir. ncolnrowkiểm soát bao nhiêu cột và hàng (bạn chỉ cần đặt một). as.tablekiểm soát xem các khía cạnh được sắp xếp như một bảng ( TRUE), với các giá trị cao nhất ở dưới cùng bên phải hay một biểu đồ ( FALSE), với các giá trị cao nhất ở trên cùng bên phải. dirđiều khiển hướng quấn: h theo chiều ngang hoặc v theo chiều dọc.

Lưới khía cạnh

Từ ?facet_grid: facet_grid()tạo thành một ma trận các bảng được xác định bởi các biến số khía cạnh hàng và cột. Nó hữu ích nhất khi bạn có hai biến rời rạc và tất cả các kết hợp của các biến đều tồn tại trong dữ liệu.

Bạn có thể sử dụng nhiều biến trong các hàng hoặc cột, bằng cách "thêm" chúng lại với nhau, ví dụ a + b ~ c + d.

facet grid()có một tham số bổ sung được gọi space, tham số này nhận các giá trị giống như scales.

# If scales and space are free, then the mapping between position
# and values in the data will be the same across all panels. This
# is particularly useful for categorical axes
ggplot(subset(mpg, manufacturer %in% c("audi", "honda", "toyota")) , aes(drv, model)) +
    geom_point() +
    facet_grid(manufacturer ~ ., scales = "free", space = "free") +
    theme(strip.text.y = element_text(angle = 0))

nhập mô tả hình ảnh ở đây

(đơn giản hóa) Ví dụ được lấy từ ?facet_grid

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.