2013-04-05 34 views
15

Tôi muốn sử dụng ggplot và faceting để xây dựng một loạt các ô mật độ được nhóm theo một yếu tố. Ngoài ra, tôi muốn một lớp khác mật độ cốt truyện trên mỗi khía cạnh mà không phải chịu các ràng buộc áp đặt bởi các khía cạnh.ggplot2: Có cách nào để che phủ một ô duy nhất cho tất cả các khía cạnh trong một ggplot

Ví dụ, cốt truyện mặt sẽ trông như thế này:

require(ggplot2) 
ggplot(diamonds, aes(price)) + facet_grid(.~clarity) + geom_density() 

và sau đó tôi muốn có cốt truyện mật độ đơn sau lớp trên đầu trang của mỗi người trong số các khía cạnh:

ggplot(diamonds, aes(price)) + geom_density() 

Hơn nữa, là ggplot với faceting cách tốt nhất để làm điều này, hoặc là có một phương pháp ưa thích?

Trả lời

18

Một cách để đạt được điều này sẽ làm cho khung dữ liệu mới diamonds2 có chứa chỉ cột price và sau đó hai geom_density() cuộc gọi - một trong đó sẽ sử dụng ban đầu diamonds và thứ hai sử dụng diamonds2. Như trong diamonds2 sẽ không có cột clarity tất cả các giá trị sẽ được sử dụng trong tất cả các khía cạnh.

diamonds2<-diamonds["price"] 
ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=diamonds2,aes(price),colour="blue") 

enter image description here

CẬP NHẬT - theo đề nghị của @BrianDiggs cùng một kết quả có thể đạt được mà không làm khung dữ liệu mới nhưng biến nó bên trong geom_density().

ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=transform(diamonds, clarity=NULL),aes(price),colour="blue") 

Một cách tiếp cận khác là vẽ dữ liệu mà không cần phải làm rõ. Thêm hai cuộc gọi đến geom_density() - trong một lần thêm aes(color=clarity) để có các đường mật độ với các màu khác nhau cho mỗi cấp độ clarity và để trống thứ hai geom_density() - điều đó sẽ thêm đường mật độ màu đen tổng thể.

ggplot(diamonds,aes(price))+geom_density(aes(color=clarity))+geom_density() 

enter image description here

+0

Cảm ơn bạn đã có câu trả lời tuyệt vời. Nếu tôi có đủ danh tiếng, tôi sẽ upvote :) Chúc mừng. – skleene

+0

Một biến thể nhỏ trên phương pháp tiếp cận đầu tiên: bạn không cần phải đặt tên là 'diamonds2' trước thời hạn. Bạn có thể khai báo nó trong dòng trong đối số dữ liệu cho 'geom_density()': 'data = transform (kim cương, rõ ràng = NULL)' –

+0

@BrianDiggs Cảm ơn. Tôi cũng đã có ý tưởng tương tự sau khi đăng câu trả lời nhưng quyết định rời khỏi theo cách này để cho thấy rằng dữ liệu khác không có cột này và nói chung hơn (nếu đã có sẵn các khung dữ liệu khác). –

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