2010-08-14 5 views
12

Có cách nào để tạo một ô trong R sẽ hiển thị với hộp (ở đâu đó) là "N = (cỡ mẫu)" không? Điều chỉnh độ rộng hợp lý điều chỉnh độ rộng của hộp trên cơ sở kích thước mẫu, nhưng điều đó không cho phép so sánh giữa các ô khác nhau.tạo một ô vuông trong R có nhãn hộp có kích thước mẫu (N)

FWIW, tôi đang sử dụng lệnh boxplot trong thời trang sau đây, nơi 'f1' là một yếu tố:

boxplot(xvar ~ f1, data=frame, xlab="input values", horizontal=TRUE) 

Trả lời

23

Dưới đây là một số mã ggplot2. Nó sẽ hiển thị kích thước mẫu tại trung bình mẫu, làm cho nhãn đa chức năng!

Đầu tiên, một chức năng đơn giản cho fun.data

give.n <- function(x){ 
    return(c(y = mean(x), label = length(x))) 
} 

Bây giờ, để chứng minh với những viên kim cương dữ liệu

ggplot(diamonds, aes(cut, price)) + 
    geom_boxplot() + 
    stat_summary(fun.data = give.n, geom = "text") 

Bạn có thể phải chơi với các kích thước văn bản để làm cho nó trông tốt, nhưng bây giờ bạn có một nhãn cho kích thước mẫu mà cũng cung cấp cho một cảm giác của skew.

+0

Hoạt động tuyệt vời và trông đẹp mắt. Cảm ơn! –

+3

Nếu tôi ggplot-ing với 'geom_boxplot (aes (fill = factor (f2)))' trong đó f2 là một yếu tố thứ hai - là có một biến thể trên stat_summary cho phép 'các hộp phụ' để nhận N của riêng chúng ? –

+2

Ví dụ mã để tiết kiệm không gian: 'ggplot (mpg, aes (nhà sản xuất, hwy, fill = factor (năm))) + geom_boxplot() + stat_summary (fun.data = give.n, geom =" text ", position = position_dodge (height = 0, width = 0.75), size = 3) 'Bạn có thể phải tự điều chỉnh giá trị được truyền tới' width' trong 'position_dodge()' – JoFrhwld

9

Bạn có thể sử dụng tham số names để viết n bên cạnh mỗi tên yếu tố.

Nếu bạn không muốn để tính toán n mình bạn có thể sử dụng mẹo nhỏ này:

# Do the boxplot but do not show it 
b <- boxplot(xvar ~ f1, data=frame, plot=0) 
# Now b$n holds the counts for each factor, we're going to write them in names 
boxplot(xvar ~ f1, data=frame, xlab="input values", names=paste(b$names, "(n=", b$n, ")")) 
+0

Khá bóng bẩy! Cảm ơn vì lừa. –

+0

Làm cách nào để đặt số n phía trên thanh ngang ô cho mỗi thanh? – Dinesh

+0

@Dinesh: sử dụng hàm 'văn bản'. Bạn có thể tìm giá trị trung bình bằng cách xem tham số 'stats'. Ví dụ: 'văn bản (seq_along (f1), b $ số liệu thống kê [3,], b $ n)' – nico

0

Gói gplots cung cấp boxplot.n, theo tài liệu sản xuất hộp thoại có chú thích với số quan sát.

4

Để có được n trên đỉnh của thanh, bạn có thể sử dụng text với stat chi tiết được cung cấp bởi boxplot như sau

b <- boxplot(xvar ~ f1, data=frame, plot=0) 
text(1:length(b$n), b$stats[5,]+1, paste("n=", b$n)) 

Các số liệu thống kê lĩnh vực b là một ma trận, mỗi cột chứa sự khắc nghiệt của roi thấp hơn, bản lề dưới, trung bình, bản lề trên và cực của râu trên cho một nhóm/ô.

+1

Cảm ơn, hoạt động như một sự quyến rũ –

0

Tôi đã tìm ra giải pháp thay thế bằng gói Envstats. Gói này cần phải được tải về, nạp và kích hoạt sử dụng:

library(Envstats) 

Các stripChart (khác với stripchart) không thêm vào bảng xếp hạng một số giá trị như các giá trị n. Đầu tiên tôi vẽ hộp đồ của tôi. Sau đó, tôi sử dụng add = T trong stripChart. Rõ ràng, nhiều thứ đã được ẩn trong mã stripChart để chúng không hiển thị trên ô vuông. Đây là mã tôi sử dụng cho stripChart để ẩn hầu hết các mục.

Boxplot với stripChart tích hợp để hiển thị các giá trị n:

stripChart(data.frame(T0_G1,T24h_G1,T96h_G1,T7d_G1,T11d_G1,T15d_G1,T30d_G1), show.ci=F,axes=F,points.cex=0,n.text.line=1.6,n.text.cex=0.7,add=T,location.scale.text="none") 

Vì vậy boxplot

boxplot(data.frame(T0_G1,T24h_G1,T96h_G1,T7d_G1,T11d_G1,T15d_G1,T30d_G1),main="All Rheometry Tests on Egg Plasma at All Time Points at 0.1Hz,0.1% and 37 Set 1,2,3", names=c("0h","24h","96h","7d ", "11d", "15d", "30d"),boxwex=0.6,par(mar=c(8,4,4,2))) 

Sau đó stripChart

stripChart(data.frame(T0_G1,T24h_G1,T96h_G1,T7d_G1,T11d_G1,T15d_G1,T30d_G1), show.ci=F,axes=F,points.cex=0,n.text.line=1.6,n.text.cex=0.7,add=T,location.scale.text="none") 

Bạn luôn có thể điều chỉnh độ cao của những con số (n giá trị) để chúng phù hợp với nơi bạn muốn.