2012-05-04 32 views
7

Tôi đang cố gắng tạo một ô chữ trong R-cran được phân loại theo hai yếu tố khác nhau trên trục x. Vấn đề của tôi nằm trong việc tạo nhãn cho một yếu tố với mức +20 kéo dài toàn bộ biểu đồ một cách thích hợp trong khi sử dụng chú giải để gắn nhãn yếu tố thứ hai chỉ có 2 đến 3 cấp.R - ô chữ có nhiều nhãn yếu tố

Đây là một kịch bản thử nghiệm rằng khoảng bắt chước bộ dữ liệu thực tế của tôi:

d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500)) 
# first factor has 20+ levels 
d$f1<-factor(d$f1) 
# second factor a,b,c 
d$f2<-factor(d$f2) 

boxplot(x~f2*f1,data=d,col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE) 

# y axis is numeric and works fine 
yts=pretty(d$x,n=5) 
axis(2,yts) 

# I know this doesn't work; what I'd like is to spread the factors out 
# so the each group of three(a,b,c) is labeled correctly 
axis(1,at=seq(1:20)) 

# Use the legend to handle the f2 factor labels 
legend(1, max(d$x), c("a", "b","c"),fill = c("red", "blue","green")) 

Nhờ sự giúp đỡ

Trả lời

13

FWIW, một giải pháp ggplot2:

library(ggplot2) 
ggplot(data = d, aes(x = f1, y = x)) + 
    geom_boxplot(aes(fill = f2), width = 0.8) + theme_bw() 

enter image description here

+0

Tôi không bao giờ nhận ra bạn có thể chủ đề các ô 'ggplot'! Tôi đã luôn luôn tắt sử dụng chúng do nền màu xám xấu xí. Cảm ơn đã cho tôi thấy điều đó. – thelatemail

+0

@thelatemail, chủ đề cho phép hầu như mọi yếu tố trong cốt truyện được điều chỉnh/sửa đổi. –

+0

@thelatemail - xem [tại đây] (https://github.com/hadley/ggplot2/wiki/Themes) để biết tổng quan về các chủ đề. – Chase

5

Nếu bạn muốn có một nhãn ở giữa từng nhóm 3 hộp, hãy thử một cái gì đó như thế này :

axis(1,at=seq(2,60,3),labels=1:20,cex.axis=0.7) 

enter image description here

Suy rộng ra, này sẽ là:

groups <- 20 
numbox <- 3 
total <- groups * numbox 
xpoints <- seq(median(1:numbox),total,numbox) 
+0

Nhờ cả hai bạn, chính xác những gì tôi đang tìm kiếm. – Kerry

+0

@Kerry - Đừng lo! Trong trường hợp đó, đừng quên cung cấp cho chúng tôi cả một upvote (mũi tên lên) và chọn một câu trả lời (biểu tượng đánh dấu bên dưới các mũi tên) – thelatemail

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