2012-04-13 28 views
12

Sử dụng ggplot2 Tôi đang tạo biểu đồ với một hệ số trên trục hoành và một yếu tố khác cho màu tô, sử dụng vị trí được né tránh. Vấn đề của tôi là yếu tố lấp đầy đôi khi chỉ mất một giá trị cho một giá trị của hệ số ngang, và không có gì để né tránh thanh chiếm toàn bộ chiều rộng. Có cách nào để làm cho nó né tránh không có gì để tất cả các chiều rộng thanh là như nhau? Hoặc tương đương với âm mưu của 0?Một cách để luôn né tránh một biểu đồ?

Ví dụ

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) + 
geom_histogram(position = "dodge") 

enter image description here

This answer có một vài ý tưởng. Nó cũng được hỏi trước khi phiên bản mới được phát hành, vì vậy có thể có gì đó đã thay đổi? Sử dụng các khía cạnh (cũng được hiển thị here) Tôi không thích cho tình huống của mình, mặc dù tôi cho rằng việc chỉnh sửa dữ liệu và sử dụng geom_bar có thể hoạt động nhưng cảm thấy không phù hợp. Hơn nữa, khi tôi đã cố gắng đánh bóng mặt nào

ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) + 
    geom_bar() + facet_grid(~factor(carb)) 

tôi nhận được báo lỗi "Lỗi trong layout_base (dữ liệu, màu sắc, thả = thả): Ít nhất một lớp phải chứa tất cả các biến được sử dụng để đánh bóng mặt"

tôi giả sử tôi có thể tạo một khung dữ liệu về số lượng và sau đó sử dụng geom_bar,

mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")), 
    .fun = count, .variables = c("carb", "gear")) 

điền các mức không có giá trị 0. Có ai biết nếu điều đó sẽ làm việc hoặc nếu có một cách tốt hơn?

+2

Tôi biết bạn không xem xét nó lý tưởng, nhưng tôi nghĩ rằng trước khi tính toán số lượng và sử dụng geom_bar sẽ là cách ưa thích của tôi để làm điều này. – joran

Trả lời

11

Cập nhậtgeom_bar nhu cầu stat = "identity"

Tôi không chắc chắn nếu điều này là quá muộn cho bạn, nhưng thấy câu trả lời cho một bài đăng gần đây here Đó là, tôi muốn nghe lời khuyên của Joran tính toán trước số điện thoại bên ngoài cuộc gọi ggplot và sử dụng geom_bar. Như với câu trả lời cho bài viết khác, số đếm được thu được theo hai bước: đầu tiên, một số đếm chéo được tính bằng cách sử dụng dcast; sau đó thứ hai, melt crosstabulation.

library(ggplot2) 
library(reshape2) 

dat = dcast(mtcars, factor(carb) ~ factor(gear), fun.aggregate = length) 
dat.melt = melt(dat, id.vars = "factor(carb)", measure.vars = c("3", "4", "5")) 
dat.melt 

(p <- ggplot(dat.melt, aes(x = `factor(carb)`, y = value, fill = variable)) + 
    geom_bar(stat = "identity", position = "dodge")) 

Biểu đồ:

enter image description here

+0

Chăm sóc để đính kèm hình ảnh kết quả cuối cùng? –

+0

Tôi đã thêm biểu đồ và thực hiện một vài thay đổi biên tập để làm rõ phản hồi. –

+0

Không bao giờ quá muộn! Cảm ơn bạn đã mở rộng nhận xét đó thành câu trả lời hoàn chỉnh. – Gregor

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