2012-04-16 27 views
14

Tôi đang cố sửa đổi âm mưu example of a simple forest bằng cách giới thiệu các khía cạnh theo biến yếu tố.Làm cách nào để xóa các yếu tố rỗng khỏi các khía cạnh ggplot2?

dữ liệu Giả sử của cấu trúc này:

test <- structure(list(characteristic = structure(c(1L, 2L, 3L, 1L, 2L 
), .Label = c("Factor1", "Factor2", "Factor3"), class = "factor"), 
    es = c(1.2, 1.4, 1.6, 1.3, 1.5), ci_low = c(1.1, 1.3, 1.5, 
    1.2, 1.4), ci_upp = c(1.3, 1.5, 1.7, 1.4, 1.6), label = structure(c(1L, 
    3L, 5L, 2L, 4L), .Label = c("1.2 (1.1, 1.3)", "1.3 (1.2, 1.4)", 
    "1.4 (1.3, 1.5)", "1.5 (1.4, 1.6)", "1.6 (1.5, 1.7)"), class = "factor"), 
    set = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("H", "S" 
    ), class = "factor")), .Names = c("characteristic", "es", 
"ci_low", "ci_upp", "label", "set"), class = "data.frame", row.names = c(NA, 
-5L)) 

Và chạy mã:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1) + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

Tạo đầu ra như thế:

enter image description here

Tất cả tốt cho đến nay. Tuy nhiên, tôi muốn loại bỏ mức Factor3 trống từ bảng điều khiển phía dưới của mình và không thể tìm ra cách để làm điều đó. Có cách nào để làm điều đó?

Cảm ơn bạn đã trợ giúp.

+5

Khi tham chiếu R, tôi đã dừng hỏi "Có ..." và bắt đầu hỏi "Làm thế nào tôi có thể ..." 'install.packages (" vận may "); thư viện (vận may); tài sản ("Yoda") ' –

Trả lời

14

EDIT Đã cập nhật thành ggplot2 0.9.3

Đây là một giải pháp khác. Nó sử dụng facet_gridspace = "free"; nó cũng sử dụng geom_point()geom_errorbarh() và do đó không cần coord.flip(). Ngoài ra, các nhãn đánh dấu trục x chỉ xuất hiện trên bảng điều khiển phía dưới. Trong mã bên dưới, lệnh theme không cần thiết - nó được sử dụng để xoay văn bản dải xuất hiện theo chiều ngang. Sử dụng test dataframe từ trên cao, đoạn mã sau nên sản xuất những gì bạn muốn:

library(ggplot2) 

p <- ggplot(test, aes(y = characteristic, x = es, xmin = ci_low, xmax = ci_upp)) + 
    geom_point() + 
    geom_errorbarh(height = 0) + 
    facet_grid(set ~ ., scales = "free", space = "free") + 
    theme_bw() + 
    theme(strip.text.y = element_text(angle = 0)) 

p 

Giải pháp này dựa trên ví dụ trên trang 124 trong cuốn sách ggplot2 Wickham.

+1

ggplot2 không bao giờ ngừng làm tôi ngạc nhiên. – radek

12

Sử dụng scales = free như trong:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1, scales="free") + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

p 

nào sản xuất:

enter image description here

EDIT: Tôi thực sự nghĩ rằng tôi thích tranh luận drop = TRUE tốt hơn cho giải pháp này như trong:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + 
    geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1, drop=TRUE) + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

p 
+0

Tuyệt vời! Làm việc như một sự quyến rũ. Một câu hỏi mặc dù: Tấm sẽ luôn luôn có kích thước tương ứng (theo chiều dọc)? Có .. Không - Làm thế nào tôi có thể mở rộng quy mô theo số lượng các yếu tố được sử dụng bởi mỗi yếu tố? Ví dụ - nếu tôi có 10 ở trên bảng điều khiển, và 3 ở phía dưới? – radek

+3

Tôi nghĩ rằng 'không gian =" miễn phí "' là đối số khác mà bạn đang tìm kiếm. –

+0

Tôi nghĩ rằng 'không gian =" miễn phí "đối số là dành cho [facet_grid] (http://had.co.nz/ggplot2/facet_grid.html). Tuy nhiên 'scale = 'free_x'' không còn hoạt động ở đó nữa:/ – radek

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