2014-11-20 20 views
10

Tôi có khung dữ liệu chứa các thùng số trục x và dữ liệu trục y liên tục trên nhiều danh mục. Ban đầu, tôi tạo ra một hộp bằng cách làm cho các trục x "yếu tố", và làm một hộp của dữ liệu tan chảy. dữ liệu tái sản xuất:Cách tạo geom_boxplot với số lượng lớn các biến x liên tục

x <- seq(1,10,by=1) 
y1 <- rnorm(10, mean=3) 
y2 <- rnorm(10, mean=10) 
y3<- rnorm(10, mean=1) 
y4<- rnorm(10, mean=8) 
y5<- rnorm(10, mean=12) 
df <- data.frame(x,y1,y2,y3,y4,y5) 
df.m <- melt(df, id="x") 

Mã của tôi để tạo ra các dữ liệu trục x là một yếu tố:

df.m $ x < - as.factor (df.m $ x)

ggplot của tôi:

ggplot(df.m, aes(x=x, y=value))+ 
geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+ 
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) 

Cốt truyện kết quả: The resulting plot:

Vấn đề là tôi không thể sử dụng khoảng cách số trục x vì trục x được phân loại là một yếu tố, có khoảng cách bằng nhau. Tôi muốn để có thể sử dụng một cái gì đó như scale_x_continuous để thao tác các trục vỡ và khoảng cách đến, nói, một khoảng thời gian 2, chứ không phải là một hộp mỗi 1, nhưng khi tôi cố gắng vẽ dữ liệu với trục x "as.numeric ", tôi chỉ nhận được một boxplot của tất cả các dữ liệu:

plot

Bất kỳ đề xuất cho một cách để có được đường cong boxplot này liên tục tìm kiếm (hình ảnh đầu tiên) trong khi vẫn có thể kiểm soát các thuộc tính bằng số trục x? Cảm ơn!

+0

@Henrik Liên kết ổ đĩa Google trong câu hỏi có phù hợp với bạn không? Đó sẽ là khung dữ liệu cho ví dụ này. Cảm ơn bạn đã xuất hiện và giúp tôi lần nữa! Đó là một ngày có vấn đề trong thế giới R ... – AndMan21

+0

@Henrik Gotcha, xin lỗi về điều đó.Chỉnh sửa ngay bây giờ – AndMan21

Trả lời

16

Đây là cách sử dụng dữ liệu gốc bạn đã đăng trên Google - điều này thực sự hữu ích hơn nhiều, IMO.

ggplot(df, aes(x=CH, y=value,group=CH))+ 
    geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+ 
    scale_x_log10() 

Vì vậy, như @BenBolker nói trước khi xóa câu trả lời của mình (??), bạn nên rời khỏi x-biến (CH) là số, và thiết lập group=CH trong cuộc gọi đến aes(...).

Với dữ liệu thực của bạn, có một vấn đề khác. CH của bạn ít nhiều khoảng cách logarithmically, do đó, có khoảng nhiều điểm < 1 vì có từ 1 đến 10, v.v. ggplot muốn làm cho các hộp có cùng kích thước, vì vậy với trục x chiều rộng hộp là nhỏ hơn chiều rộng của đường và bạn hoàn toàn không thấy các hộp. Thay đổi trục x thành thang đo lôgarit sửa chữa, nhiều hay ít.

0

Không thực hiện x một yếu tố. Bạn cần phải thẩm mỹ ánh xạ một group đó là một yếu tố quyết định mà hộp giá trị gắn liền với, may mắn, sau khi nóng chảy, đây là những gì bạn variable cột là:

ggplot(df.m, aes(x = x, y = value, group = variable)) + 
    geom_boxplot() 

Như x vẫn còn số, bạn có thể cho nó bất kỳ giá trị nào bạn muốn trong một mức độ cụ thể là variable và ô mẫu sẽ hiển thị tại vị trí đó. Hoặc bạn có thể chuyển đổi trục x, v.v.

+0

Vấn đề là: Tôi đã làm tan chảy dữ liệu gốc chủ yếu chỉ để lấy dữ liệu từ việc có một tấn cột đến một cột. Tôi không thực sự muốn ánh xạ theo biến, nhưng muốn ánh xạ theo giá trị x. – AndMan21

+1

Sau đó đặt 'group = x' là @BenBolker nói (quá tệ, anh ấy đã xóa câu trả lời của mình). – jlhoward

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