2010-01-22 32 views
5

Tôi có một gần-boxplot như jitter-cốt truyện:Thêm nhãn phân nhóm để một âm mưu jitter trong ggplot2

dt <- rbind(se,cb,cb.se) 
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .) 

plot http://i50.tinypic.com/1zbfjih.png

Tôi rất muốn đưa một nhãn tóm tắt cho từng nhóm ở giữa của cốt truyện - ví dụ kích thước tổng số ở đây:

aggregate(list(size=dt$size), list(dt$ds, dt$test), sum) 

    Group.1 Group.2 size 
1  b217  se 9847 
2  c10  se 97296 
3  c613  se 21633 
4  c7  se 207540 
... 

tôi đã cố gắng sử dụng + geom_text(aes(x=ds, y=128, label=sum(size)), size=2) để thêm nhãn, nhưng tôi nhận được cùng một nhãn trên mỗi vị trí - làm thế nào tôi có thể nhận được số tiền của chỉ là phần dữ liệu đó?

Edit: Dưới đây là nơi tôi đang ở bây giờ - có lẽ tôi chỉ cần đi theo hướng sai

data <- rbind(se,cb,cb.se) 
labels <-ddply(data, c("ds", "test"), function(df) sum(df$size)) 
ggplot(data=data, aes(x=ds)) + 
    geom_jitter(aes(y=size, colour=root)) + 
    geom_text(data=labels, aes(x=ds, y=600, label=V1), size=3) + 
    facet_wrap(test ~ .) 

Mã này không làm việc - Tôi nhận được một lỗi undefined columns selected ... ở đâu đó . Có lẽ đó là vì nhiều phần data=?

+0

Từ một đọc nhanh, mã mà có vẻ tốt đẹp đối với tôi. Thật khó để nói nhiều hơn mà không có ví dụ tái sản xuất. – hadley

+1

Tôi đã đăng một giải pháp. Thật không may, vì bạn chưa cung cấp dữ liệu mẫu, tôi phải tạo lại dữ liệu ngẫu nhiên. Điều này có nghĩa là giải pháp có thể hoặc không thể phản ánh dữ liệu của riêng bạn. Để tham khảo trong tương lai, bạn sẽ thu hút thêm câu trả lời nếu bạn đưa ra ví dụ tối thiểu về vấn đề của mình và dán một số dữ liệu mẫu mà tất cả chúng ta có thể sử dụng để tạo lại vấn đề của bạn. Dù sao, tôi hy vọng nó sẽ giúp. – Andrie

Trả lời

6

Vì bạn không cung cấp dữ liệu mẫu, tôi sẽ trình bày một giải pháp sử dụng dữ liệu ngẫu nhiên.

set.seed(1) 
n <- 100 
dat <- data.frame(
    ds = sample(paste("x", 1:8, sep=""), n, replace=TRUE), 
    size = runif(n, 0, 250), 
    root = sample(c(TRUE, FALSE), n, replace=TRUE), 
    test = sample(c("se", "cb", "cb.se"), n, replace=TRUE) 
) 


head(dat) 
    ds  size root test 
1 x3 163.68098 TRUE cb.se 
2 x3 88.29932 TRUE se 
3 x5 67.56504 FALSE cb 
4 x8 248.17102 TRUE cb 
5 x2 158.37332 TRUE cb 
6 x8 53.30203 FALSE cb.se 

p <- ggplot(dat, aes(x=ds, y=size)) + 
    geom_jitter(aes(colour=root)) + 
    facet_grid(test~.) 

Tạo khung dữ liệu chứa dữ liệu nhãn. Lưu ý việc sử dụng summarize. Điều này cho ddply để tạo ra một cột mới vào data.frame

labels <- ddply(dat, .(ds, test), summarize, size=round(sum(size), 0)) 
head(labels) 
    ds test size 
1 x1 cb 193 
2 x1 cb.se 615 
3 x1 se 274 
4 x2 cb 272 
5 x2 cb.se 341 
6 x2 se 1012 

p + geom_text(aes(x=ds, label=size, y=128), data=labels, size=2) 

enter image description here

+0

Điều này trông giống như những gì tôi cần. Cảm ơn! – Thelema

+1

@ Thelema, vui vì tôi có thể giúp đỡ. (Hãy nhớ phân bổ tiền thưởng, vì điều này không xảy ra tự động) – Andrie

+0

cũng xứng đáng. tốt đẹp. và nhanh chóng :) –

1

Hãy xem tại đây. Nó có thể hữu ích Adding direct labels to ggplot2 and lattice plots

+0

directlabels không giải quyết được vấn đề của tôi, nó không định vị tốt trên các ô jitter và nó muốn sử dụng các nhãn chú giải của tôi để gắn nhãn biểu đồ thay vì các nhãn được cung cấp. – Thelema

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