2013-09-21 44 views
5

Tôi có dữ liệu trông giống như ví dụ này trong facet_wrap documentation:Dễ dàng thêm một khía cạnh '(tất cả)' vào facet_wrap trong ggplot2?

http://docs.ggplot2.org/current/facet_wrap-29.png

Tôi muốn để điền vào khía cạnh cuối cùng với quan điểm tổng thể, sử dụng tất cả dữ liệu.

Có cách nào dễ dàng để thêm một khía cạnh 'tổng' với facet_wrap không? Thật dễ dàng để thêm lề vào facet_grid, nhưng tùy chọn đó không tồn tại trong facet_wrap.

Lưu ý: sử dụng facet_grid không phải là tùy chọn nếu bạn muốn một góc phần tư như trong ô trên, yêu cầu đối số ncol hoặc nrow từ facet_wrap.

Trả lời

7
library(ggplot2) 

p <- qplot(displ, hwy, data = transform(mpg, cyl = as.character(cyl))) 
cyl6 <- subset(mpg, cyl == 6) 
p + geom_point(data = transform(cyl6, cyl = "7"), colour = "red") + 
    geom_point(data = transform(mpg, cyl = "all"), colour = "blue") + 
    facet_wrap(~ cyl) 

enter image description here

+0

Hoàn hảo! Bạn cũng sẽ biết làm thế nào để thay đổi 'tất cả' thành chuỗi khác? cảm ơn rất nhiều về sự giúp đỡ của bạn. –

+0

Không khó chút nào. Chỉ cần thay đổi nó trong mã. – Roland

+0

Hoàn hảo, hoạt động như mong đợi. Không biết các thủ thuật 'transform' (cũng học về' mutate' trong cùng một dịp). Cảm ơn một lần nữa vì sự giúp đỡ của bạn. –

-2

bạn có thể thử "lề" trong facet_wrap như sau:

library(ggplot2) 

p <- qplot(displ, hwy, data = transform(mpg, cyl = as.character(cyl))) 
cyl6 <- subset(mpg, cyl == 6) 
p + geom_point(data = transform(cyl6, cyl = "7"), colour = "red") + 
    facet_wrap(~ cyl, margins=TRUE) 
3

tôi thích một cách tiếp cận hơi khác. Về cơ bản, dữ liệu được nhân đôi trước khi tạo cốt truyện, với một bộ dữ liệu mới được thêm vào cho tất cả dữ liệu. Tôi đã viết hàm CreateAllFacet sau để đơn giản hóa quy trình. Nó trả về một khung dữ liệu mới với dữ liệu trùng lặp và một cột bổ sung facet.

library(ggplot2) 

#' Duplicates data to create additional facet 
#' @param df a dataframe 
#' @param col the name of facet column 
#' 
CreateAllFacet <- function(df, col){ 
    df$facet <- df[[col]] 
    temp <- df 
    temp$facet <- "all" 
    merged <-rbind(temp, df) 

    # ensure the facet value is a factor 
    merged[[col]] <- as.factor(merged[[col]]) 

    return(merged) 
} 

Lợi ích của việc bổ sung thêm các cột mới facet đến dữ liệu gốc là nó vẫn cho phép biến cylinder được sử dụng để tô màu cho các điểm trong cốt truyện trong thẩm mỹ:

df <- CreateAllFacet(mpg, "cyl") 

ggplot(data=df, aes(x=displ,y=hwy)) + 
    geom_point(aes(color=cyl)) + 
    facet_wrap(~ facet) + 
    theme(legend.position = "none") 

enter image description here

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