2013-04-09 36 views
8

Tôi đang cố gắng thay đổi màu 'nền' của một ggplot. Những gì tôi muốn đạt được là cốt truyện được hiển thị bên dưới. Tôi đã thử nó với geom_ribbon nhưng tôi chỉ có thể xác định ymin và ymax. Điều này cho phép tôi chỉ tạo hai ô vuông.Vẽ nhiều hình vuông với ggplot

Code tôi sử dụng cho đến nay:

df <- data.frame(x = rnorm(10), y = rnorm(10)) 

ggplot(df) + 
geom_point(aes(x, y)) + 
geom_ribbon(aes(x = x, ymin = min(y), ymax = 0), fill = "red", alpha = .5) + 
geom_ribbon(aes(x = x, ymin = min(0), ymax = max(y)), fill = "blue", alpha = .5) 

Và đây là kết quả tôi muốn nhận được:

ggplot example http://i50.tinypic.com/25j8p5z.png

Cảm ơn thời gian của bạn.

+0

Có lẽ bạn đang nghĩ đến việc 'geom_rect'? – joran

+0

Bạn nói đúng! Tôi đã nhìn chằm chằm vào các trang tài liệu ggplot cho các lứa tuổi, nhưng tôi đã hoàn toàn bỏ lỡ điều này. – jeroen81

Trả lời

6

Một biến thể về câu trả lời của bạn, nếu bạn muốn "nền" màu sắc để đi tất cả các cách để các cạnh của đồ thị và không chỉ để những thái cực của dữ liệu:

ggplot(df) + 
    geom_rect(xmin = -Inf, xmax = 0, ymin = -Inf, ymax = 0, fill = "red") + 
    geom_rect(xmin = 0, xmax = Inf, ymin = -Inf, ymax = 0, fill = "blue") + 
    geom_rect(xmin = 0, xmax = Inf, ymin = 0, ymax = Inf, fill = "green") + 
    geom_rect(xmin = -Inf, xmax = 0, ymin = 0, ymax = Inf, fill = "yellow") + 
    geom_point(aes(x, y), size = 5) 

enter image description here


EDIT: tính minh bạch

Thêm alpha=0.5 là "hoạt động" ngoại trừ vấn đề bằng cách sử dụng geom_rect, thậm chí không tham chiếu khung dữ liệu gốc df, đã vẽ hình chữ nhật cho mỗi hàng df (10 lần, trong trường hợp này). Đặt alpha=0.01 cho thấy rằng có độ trong suốt, nhưng ở mức thứ 10 là mức mong đợi. Cách tiếp cận nên được chú thích bằng các hình chữ nhật; chú thích vẽ chỉ có một trường hợp duy nhất của Geom, không phải là một cho mỗi hàng của khung dữ liệu gốc:

ggplot(df) + 
    annotate("rect", xmin=-Inf, xmax=0, ymin=-Inf, ymax=0, fill="red", alpha=0.5) + 
    annotate("rect", xmin=0, xmax=Inf, ymin=-Inf, ymax=0, fill="blue", alpha=0.5) + 
    annotate("rect", xmin=0, xmax=Inf, ymin=0, ymax=Inf, fill="green", alpha=0.5) + 
    annotate("rect", xmin=-Inf, xmax=0, ymin=0, ymax=Inf, fill="yellow", alpha=0.5) + 
    geom_point(aes(x, y), size=5) 

enter image description here

+0

Cảm ơn, điều này làm cho nó trông đẹp hơn. – jeroen81

+0

Bất kỳ ý tưởng làm thế nào để làm cho hình chữ nhật trong suốt với alpha? chỉ alpha = .5 hoặc fill.alpha = .5 không hoạt động. Tôi cũng đã cố gắng với inherent.aes = F nhưng không có succes với điều này hoặc. – jeroen81

+0

Cảm ơn! Tôi tìm thấy một giải pháp bằng cách tạo một df riêng biệt với các giá trị de x và y và sau đó sử dụng aes (fill = "x"). Nhưng bạn là giải pháp tốt hơn. – jeroen81

3

Sau nhận xét từ joran. Câu trả lời:

ggplot(df) + 
    geom_rect(aes(xmin = min(x), xmax = 0, ymin = min(y), ymax = 0), fill = "red") + 
    geom_rect(aes(xmin = min(0), xmax = max(x), ymin = min(y), ymax = 0), fill = "blue") + 
    geom_rect(aes(xmin = min(0), xmax = max(x), ymin = 0, ymax = max(y)), fill = "green") + 
    geom_rect(aes(xmin = min(x), xmax = 0, ymin = 0, ymax = max(y)), fill = "yellow") + 
    geom_point(aes(x, y), size = 5) 
Các vấn đề liên quan