2011-10-26 45 views

Trả lời

27

đây là một cách tiếp cận bởi Subsetting dữ liệu:.

ggplot(mtcars, aes(mpg, disp)) + facet_wrap(~cyl) + 
    geom_point(data = subset(mtcars, cyl == 4)) + 
    geom_line(data = subset(mtcars, cyl == 6)) + 
    geom_text(data = subset(mtcars, cyl == 8), aes(label = gear)) 

enter image description here

+4

bạn có thể đơn giản hóa mã một chút bằng cách sử dụng 'tập con = (cyl == 4)' thay vì bằng cách sử dụng lệnh 'data'. – Ramnath

+0

tuyệt vời! Tôi thường quên đối số tập hợp con ... cảm ơn. – kohske

2

Dưới đây là một số dữ liệu mẫu với 5 nhóm (g). Chúng tôi muốn có một loại geom khác trong khía cạnh thứ năm. Chú ý đến việc tạo ra hai phiên bản khác nhau của biến số y, một cho bốn khía cạnh đầu tiên và một cho phần thứ năm.

dfr <- data.frame(
    x = rep.int(1:10, 5), 
    y = runif(50), 
    g = gl(5, 10) 
) 
dfr$is.5 <- dfr$g == "5" 
dfr$y.5 <- with(dfr, ifelse(is.5, y, NA)) 
dfr$y.not.5 <- with(dfr, ifelse(is.5, NA, y)) 

Nếu các geom khác nhau có thể sử dụng cùng tính thẩm mỹ (như điểm và đường) thì không phải là vấn đề.

(p1 <- ggplot(dfr) + 
    geom_line(aes(x, y.not.5)) + 
    geom_point(aes(x, y.5)) + 
    facet_grid(g ~ .) 
) 

Tuy nhiên, biểu đồ đường và biểu đồ thanh yêu cầu các khía cạnh khác nhau, do đó chúng không hoạt động như mong đợi.

(p2 <- ggplot(dfr) + 
    geom_line(aes(x, y.not.5)) + 
    geom_bar(aes(y.5)) + 
    facet_grid(g ~ .) 
) 

Trong trường hợp này, tốt hơn là vẽ hai đồ thị riêng biệt và có thể kết hợp chúng với Viewport.

Các vấn đề liên quan