2012-04-05 27 views
7

Tôi cố gắng để vẽ các loại khác nhau của lô (lô dòng và biểu đồ thanh) phía dưới nhau, tất cả họ đều có trục giống nhau:Vẽ âm mưu thanh bên dưới xyplot với cùng trục x?

c1 <- ggplot(data, aes(date, TotalMutObs)) + stat_smooth(se = FALSE) + 
      geom_point() + 
      opts(axis.title.x = theme_blank()) + 
      ylab("Cumulative number of new mutations") 
c2 <- ggplot(data, aes(date, distance)) + stat_smooth(se = FALSE) + 
      geom_point() + 
      opts(axis.title.x = theme_blank()) + 
      ylab("Cumulative mean pairwise distance") 
c3 <- ggplot(data, aes(x = date, y = NbOfHorses)) + 
      geom_bar(stat = "identity") + 
      opts(axis.title.x = theme_blank()) + 
      ylab("Number of horses sampled") 

grid.arrange(c1, c2,c3) 

Tuy nhiên, những ngày trên trục x không được xếp hàng cho các ô khác nhau. enter image description here

Dưới đây là một số dữ liệu để thử nó ra:

date<-c("2003-03-13","2003-03-25","2003-03-26","2003-03-27","2003-03-28","2003-03-31","2003-04-01","2003-04-02","2003-04-04","2003-04-08","2003-04-09","2003-04-10","2003-04-11","2003-04-14","2003-04-15","2003-04-17","2003-04-19","2003-04-21","2003-04-22","2003-04-28","2003-05-08"); 

NbOfHorses<-c("1","2","1","3","4","5","4","3","3","3","3","4","2","4","1","2","4","1","2","1","2"); 

TotalMutObs<-c("20","30","58","72","140","165","204","230","250","286","302","327","346","388","393","414","443","444","462","467","485"); 

distance<-c("0.000693202","0.00073544","0.000855432","0.000506876","0.000720193","0.000708047","0.000835468","0.000812401","0.000803149","0.000839117","0.000842048","0.000856393","0.000879973","0.000962382","0.000990666","0.001104861","0.001137515","0.001143838","0.00121874","0.001213737","0.001201379"); 

data<-as.data.frame(cbind(date,NbOfHorses,TotalMutObs,distance)); 

Chúc mừng, Joseph

+0

là một 'xlim() 'hàm trong ggplot2? Một cái gì đó như 'c3 <- c3 + xlim (phạm vi (dữ liệu $ ngày))' –

+1

Tôi không nghĩ rằng đó là vấn đề bởi vì tất cả ba trục x khoảng chính xác cùng một phạm vi. – blJOg

+0

Đặt một số dữ liệu về phía trước và chúng tôi sẽ kiểm tra. –

Trả lời

7

Cách giải quyết vấn đề này là để làm việc trong ggplot2 và sáng tạo về xếp chồng các bản sao của bạn và sau đó gửi các tập con đến mỗi geom mà bạn cần. không có

#A version of your data cleaned up 
dat <- data.frame(date = as.Date(date),NbOfHorses = as.numeric(NbOfHorses), 
       TotalMutObs = as.numeric(TotalMutObs),distance = as.numeric(distance)) 

#Create three copies, one for each panel 
# Use informative titles for grp to be panel titles  
fullDat <- rbind(dat,dat,dat) 
fullDat$grp <- rep(c('Cumulative number of new mutations', 
         'Cumulative mean pairwise distance', 
         'Number of horses sampled'),each = nrow(dat)) 

ggplot(fullDat,aes(x = date)) + 
    facet_wrap(~grp,nrow = 3,scale = "free_y") + 
    geom_point(data = subset(fullDat,grp == 'Cumulative number of new mutations'), 
     aes(y = TotalMutObs)) + 
    stat_smooth(data = subset(fullDat,grp == 'Cumulative number of new mutations'), 
     aes(y = TotalMutObs),se = FALSE) + 
    geom_point(data = subset(fullDat,grp == 'Cumulative mean pairwise distance'), 
     aes(y = distance)) + 
    stat_smooth(data = subset(fullDat,grp == 'Cumulative mean pairwise distance'), 
     aes(y = distance),se = FALSE) + 
    geom_bar(data = subset(fullDat,grp == 'Number of horses sampled'), 
     aes(y = NbOfHorses),stat = "identity") + 
    labs(x = NULL,y = NULL) 

enter image description here

+0

Điều này thật đẹp, cảm ơn bạn rất nhiều! – blJOg

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