2013-04-08 31 views
6

Tôi đang cố gắng tạo ra một phiên bản tốt hơn của cốt truyện R với ggplot2. Không chỉ có một huyền thoại chung mà còn vì tôi thích phong cách và tùy biến ggplot2. Dữ liệu của tôi bao gồm 3 tập dữ liệu riêng biệt có chứa hai nhóm quan sát giống nhau cho một số phương pháp điều trị khác nhau (nhưng khác nhau). Do đó, tôi muốn tạo ra 3 ô riêng biệt trong 1 đồ thị với một truyền thuyết chung tuy nhiên với các mức yếu tố khác nhau. Để minh họa cho quan điểm của tôi hình ảnh đầu tiên ở đây là những gì tôi đã tạo ra với cơ sở R cho đến nay: r base plot closest plot realisationLoại bỏ các yếu tố rỗng khỏi cụm sao chép trong ggplot2 với nhiều khía cạnh

tôi đã cố gắng để tạo ra một âm mưu ggplot2 với dữ liệu giả có chính xác cấu trúc tương tự như dữ liệu của tôi:

foo<-data.frame(c(letters,letters),c(rep('T1',26),rep('T2',26)), 
runif(52),rep(c(rep('Ori1',12),rep('Ori2',8),rep('ori3',6)),2)) 
names(foo)<-c('Treatment','Type','Count','Origin') 

a<-ggplot(foo,aes(x = factor(Treatment),y = Count)) 
a+ facet_grid(Origin~., scales="free_y", space="free") + 
geom_bar(stat="identity",aes(fill=factor(foo$Type)),position="dodge") 
+theme_bw()+theme(axis.text.x=element_text(angle=60,hjust=1))+coord_flip() 

Điều này mang lại cho tôi kết quả không mong muốn sau. failed ggplot2 image

Tôi biết trong những chủ đề stack overflow Removing Unused Factors from a Facet in ggplot2How can I remove empty factors from ggplot2 facets? Tuy nhiên, họ không đối phó với các đồ thị thanh cụm Tôi cố gắng để nhận ra ở đây và tôi cảm thấy họ là những vấn đề, tuy nhiên không tại làm thế nào để giải quyết nó. Tất cả các con trỏ đều được chào đón.

+3

Tôi tin rằng cho đến khi điều này là cố định (nó phức tạp), bạn đang mắc kẹt với bỏ 'coord_flip' và sử dụng' facet_wrap (~ Origin, scales = "free_x") 'thay thế. – joran

+0

@joran Cảm ơn bạn đã bình luận nhưng nó không giải quyết được vấn đề ... 'coord_flip' không thực sự đóng góp cho vấn đề ở đây, và tôi chỉ đưa nó vào bởi vì tôi thích âm mưu được định dạng theo cách này. Vấn đề chính là làm thế nào để bảo toàn 'position =" dodge "' trên các khía cạnh. Có lẽ tôi nên làm rõ rằng tôi không thực sự muốn _reproduce_ đồ thị cơ sở như vậy, tôi chỉ muốn bản chất của các lô để có thể sử dụng trong một phong cách ggplot2. –

+1

Tôi không nghĩ bạn thực sự đã thử những gì tôi đề xuất. Vấn đề là tại thời điểm này, 'coord_flip' không phải lúc nào cũng chơi độc đáo với' scale = "free" '. Đây là một vấn đề được biết đến. – joran

Trả lời

7

Để minh họa cho nhận xét của tôi:

a<-ggplot(foo,aes(x = factor(Treatment),y = Count)) 
a+ facet_wrap(~Origin, scales="free_x") + 
    geom_bar(stat="identity",aes(fill=factor(Type)),position="dodge") + 
    theme_bw() + 
    theme(axis.text.x=element_text(angle=60,hjust=1)) 

enter image description here

Lưu ý rằng nếu bạn thêm coord_flip và chuyển sang free_y bạn nhận được một lỗi cụ thể về coord_flip không làm việc với một số loại cân miễn phí, đó là nguồn của bạn vấn đề.

+1

Tại sao có 'foo $' trong 'fill = factor (foo $ Type)'. Nó không cần thiết phải không? Nó thực sự thay đổi cốt truyện khá một chút từ những gì tôi nghĩ: 'ggplot (dữ liệu = foo, aes (x = factor (Điều trị), y = Count)) + geom_bar (stat =" identity ", aes (fill = factor (Type)), position = "dodge") + theme_bw() + facet_grid (~ Xuất xứ, tỷ lệ = "miễn phí", không gian = "miễn phí") ' – Arun

+1

@Arun Bạn nói đúng, tôi vừa sao chép + dán mã của họ, và tập trung vào việc giảm các yếu tố không sử dụng. – joran

+0

cảm ơn cả hai! Rõ ràng Origin ~. trong facet.wrap ban đầu đã không tạo ra những gì tôi muốn, nhưng tôi cũng có một lỗi với chỉ sử dụng Loại thay cho foo $ Type (nên giống nhau, phải không?). @Arun: nhận xét của bạn đã cho tôi chính xác những gì tôi muốn. @joran: cảm ơn vì đã xác định lỗi phổ biến này với 'coord_flip' ... tôi đoán là tôi sẽ dính vào thanh ngang xếp chồng bình thường rồi. –

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